UDP协议模拟计算机通信

回顾一下UDP协议的特点:(请点这里)需要将数据打包,传输速度快,不用建立连接的,不保证待接收方一定会接收到消息,不可靠。

1、首先了解一下Socket服务

  Socket包装了IP地址和端口信息,计算机之间进行通信时,数据通过发送端Socket服务发出,通过接收端Socket服务接收,如图:

UDP协议模拟计算机通信_第1张图片

2、创建发送端

思路:

  (1)创建发送端Socket服务对象

  (2)接收键盘录入信息

  (3)将数据打包发送

  (4)释放资源

  代码实现:

public class SendDemo {
	public static void main(String[] args) throws IOException {

		// 创建发送端Socket对象
		DatagramSocket ds = new DatagramSocket();
 
		// 创建接收键盘录入的对象
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		// 接收键盘录入信息
		String line = null;
		while ((line = br.readLine()) != null) {
			if ("over".equals(line)) {
				break;
			}
			//创建数组
			byte[] bys = line.getBytes();

			//创建被发送的数据包,参数依次为:存储数据的数组、数组长度、接收端的IP地址、接收端进程的端口
			DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.26.254"), 12306);

			//发送数据包
			ds.send(dp);
		}
		
		//释放资源
		ds.close();
	}
}

3、创建接收端

思路:

  (1)创建接收端Socket服务对象

  (2)创建数据包(接收容器) 

  (3)调用接收方法

  (4)解析数据包,把数据显示在控制台

  代码实现:

public class ReceiveDemo {
	public static void main(String[] args) throws IOException {

		// 创建接收端Socket对象
		DatagramSocket ds = new DatagramSocket(12306);

		// 创建数据包
		while (true) { 

			//创建接收数据的数组
			byte[] bys = new byte[1024];

			//创建接收数据的数据包
			DatagramPacket dp = new DatagramPacket(bys, bys.length);
			
			// //接收数据
			ds.receive(dp);

			// 解析数据
			String ip = dp.getAddress().getHostAddress(); //获得发送端的IP地址
			String s = new String(dp.getData(), 0, dp.getLength());//将收到的信息转换成字符串
			System.out.println("from " + ip + " data is " + s);//打印信息
		}
		// ds.close(); 这里不用关闭资源,因为接收方应该始终处于监听状态才能及时捕捉到待接收数据
	}
}

  小结:创建发送、接收端都要通过Socket服务进行数据的接收与发送,其次,UDP协议发送与接收都要有数据包的参与,进行数据的打包与解析。还要注意:发送端和接收端的:端口要保持一致,否则接收不到。

UDP协议模拟计算机通信_第2张图片

你可能感兴趣的:(socket,网络编程,数据包,UDP协议,计算机通信)