UDP协议模拟计算机通信

来源:互联网 发布:我赢职场的java视频 编辑:程序博客网 时间:2024/04/27 19:31

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

1、首先了解一下Socket服务

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


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协议发送与接收都要有数据包的参与,进行数据的打包与解析。还要注意:发送端和接收端的:端口要保持一致,否则接收不到。

3 0
原创粉丝点击