网络编程三要素
- ip地址(识别设备) ipv4 ipv8
doc命令:ipconfig查看IP地址 ping IP地址 查看网络是否畅通 127.0.0.1 会送地址,本机地址,一般用于测试 - 端口(识别应用)总:0·65535 0-1023知名的网络端口(如果端口号被占用了就会启动失败)
- 协议(udp tcp)
InetAddress(表示地址)
表示Internet协议(ip)地址
public static InetAddress getByName(String host) 使用方法返回对象 里面写电脑名称或ip地址
InetAddress byName = InetAddress.getByName("DESKTOP-S5TEOK3");
InetAddress.getByName("192.168.1.106")
public String getHostName() DESKTOP-S5TEOK3 获取主机名 public String getHostAddress() 192.168.1.106 获取ip地址
udp协议
原理
两端各创建一个socket对象,这两个socket只是发送,接好数据的对象 发送端不管有没有人来接受都会运行到结束
发送数据
- 创建发送端的Socket对象( java提供了DatagramSocket类作为基于udp协议的socket)
无参构造
DatagramSocket socket = new DatagramSocket();
- 创建数据,并把数据打包
public DatagramPacket(byte buf[]数据 , int length长度 , InetAddress address主机 , int port端口 ) 构造一个数据包,发送长度为leng的数据包到指定主机上的指定端口号
DatagramPacket packet = new DatagramPacket("STRING".getBytes(), 5, InetAddress.getByName("192.168.1.106"), 4356);
- 调用DatagramSocket对象的方法发送数据
public void send(DatagramPacket p) 从此套接字发送数据包
socket.send(packet);
4.关闭数据流close
接受数据
- 创建接受端的Socket对象(DatagramSocket)
public DatagramSocket(int port) 指定端口号
DatagramSocket socket = new DatagramSocket(4356);
- 创建数据包,用于接受数据(仓库)
public DatagramPacket(byte buf[], int length长度 )用于接受长度为length数据包
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, 1024);
- 调用DatagramSocket对象的方法接收数据
public synchronized void receive(DatagramPacket p)
socket.receive(packet);
- 解析数据包,并把数据在控制台显示
public synchronized byte[] getData() 返回数据缓冲区 把写入的文件提取出来 返回的数组中没写的内容会自动为空 不设定也会提取出来
byte[] data = packet.getData();
System.out.println(new String(data));
public synchronized int getLength()返回要发送文件或接受到的数据长度
int length = packet.getLength();
- 关闭数据流close
TCP协议
原理
可靠的网络协议 他在通信的两端各建立了一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。 java:使Socket对象来代表两端的通信端口,并通过Socket产生流来进行网络通信, 客户端:socket类 服务器端:serversocket类
发送数据
- 创建客户端的socket对象(Socket客户端套接字)
public Socket(String hostip地址 , int port端口 ) 创建流套接字并将其连接到指定ip地址的指定端口号
Socket socket = new Socket("DESKTOP-S5TEOK3",5646);
- 获取输出流写数据
public OutputStream getOutputStream()
OutputStream outputStream = socket.getOutputStream();
outputStream.write(95);
接受反馈 public InputStream getInputStream()
- 释放资源
public void shutdownOutput() 客户端告诉接受端接好结束 接受端不再接收东西 使用客户端对象调用
接受数据
- 创建服务器流端的Socket对象( ServerSocket)
public ServerSocket(int port)端口 public Socket accept() 侦听要连接到次套接字并接受它
ServerSocket serverSocket = new ServerSocket(5646);
Socket accept = serverSocket.accept();
- 获取数据流,读数据,并把数据显示在控制台
public InputStream getInputStream()
InputStream inputStream = accept.getInputStream();
byte[] bytes = new byte[1024];
int a;
while ((a = inputStream.read(bytes)) != -1) {
System.out.println(a);
String s = new String(bytes, 0, a);
System.out.println(s);
}
反馈 getOutputStream 3. 释放资源
|