网络协议:UDP、TCP
TCP:传输控制协议。在使用TCP协议之前,首先建立TCP连接,形成数据传输通道。
传输数据前,采用“三次握手”方式,是可靠的。可以传输大量的数据
TCP进行通信的:客户端、服务端
UDP:将数据、源、目的封装成数据包,不需要建立连接
因无需建立连接,因此是不可靠的;每个数据包的大小限制在64k内,不适合传输大量数据
UDP进行通信的:接收端。发送端
UDP网络通信编程:
核心类:DatagramSocket。通过调用DatagramSocket中的方法发送和接收数据。
发送端A(DatagramSocket)-----接收端B(DatagramSocket)传送DatagramSocket对象【包含数据、ip、端口】
UDP说明:
1,没有明确的客户端和服务端,因此演变为数据的发送端和接收端
2,接收和发送数据都是通过DatagramSocket对象完成的
3,DatagramSocket可以指定在哪个端口传输数据
4,发送端将数据封装到DatagramSocket对象中,并发送;接收端接收DatagramSocket对象,并完成数据的拆包,取出数据。
// 使用DatagramSocket完成网络通信编程
// 发送端代码部分
// 创建DatagramSocket对象,准备在9998端口发送和接收数据
DatagramSocket datagramSocket = new DatagramSocket(9998);
// 准备数据
byte[] data = "hello,明天吃火锅~~".getBytes();
// 封装数据
DatagramPacket dataPacket = new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 9999);
// 发送数据
datagramSocket.send(dataPacket);
// 接收数据
Byte[] bytes = new Byte[1024];
dataPacket = new DatagramSocket(bytes, bytes.length)
datagramSocket.receive(dataPacket);
// 对数据进行拆包
int length = dataPacket.length();
byte[] data = dataPacket.getData();
// 将得到的数据转为字符串并显示输出
String str = new String(data, 0, length);
System.out.println(str);
// 关闭数据通道,并退出
datagramSocket.close();
System.out.println("发送端退出...");
// 接收端代码部分
// 创建DatagramSocket对象,准备在9999端口发送和接收数据
DatagramSocket datagramSocket = new DatagramSocket(9999);
// 构建DatagramPacket对象,准备接收数据
Byte[] bytes = new Byte[1024];
DatagramPacket dataPacket = new DatagramPacket(bytes, bytes.length);
System.out.println("接收端正在接收数据...");
datagramSocket.receive(dataPacket);
// 对数据进行拆包
int length = dataPacket.length();
byte[] data = dataPacket.getData();
// 将得到的数据转为字符串并显示输出
String str = new String(data, 0, length);
System.out.println(str);
// 向发送端回复
Byte[] datas = "好的,明天见~~".getBytes();
// 封装数据,发送数据
dataPacket = new DatagramPacket(datas, datas.length, InetAddress.getLocalHost(), 9999);
datagramSocket.send(dataPacket);
// 关闭数据通道,退出
datagramSocket.close();
System.out.println("接收端退出..");
发送端在本机的9998端口发送和接收数据,在封装数据包时传入的IP、端口:本机的9999端口
接收端在本机的9999端口发送和接收数据,在封装数据包时传入的IP、端口:本机的9998端口