java网络编程:13、基于UDP的socket编程(三)实现相互发送接收消息
发布日期:2021-06-29 01:43:18
浏览次数:2
分类:技术文章
本文共 2092 字,大约阅读时间需要 6 分钟。
声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!
文章目录
通过上两篇文章:1、了解了基于UDP通信的理论、基本步骤以及它跟TCP的区别,2、写一个简单的实例演示了一下。大家如需了解可参考我的系列文章,这篇将演示UDP实现相互发送接收消息。
一、前言
上篇文章我们实现了发送端向接收端发送消息的代码。那么对于这个recv接收端来说,它能不能够给我们send发送端,回一个信息呢?也就是说由这个接收端给我们发送端发送一个信息。它首先得知道发送端的ip地址、和发送端进程所绑定的端口号,那么当发送端它发送一个数据包的时候,那么这个数据包当中,就有发送端进程所在机器的ip地址和我们这个发送端进程所绑定的端口号,那么这个端口号是操作系统给它分配的任意一个可以利用的端口号。
那么接收端它收到这个数据包之后,这个时候相当于是建立起来了发送端和接收端之间的一个虚连接,那么接收端可以通过它所收到的这个数据包,从这个数据包当中提取出来发送端的ip地址和端口号,然后给我们发送端发送数据。
二、基于UDP服务器端程序的编写
/** * 基于UDP服务器端程序的编写 */ public static void recv() { try { //创建数据报套接字对象,绑定端口号为6000 DatagramSocket ds = new DatagramSocket(6000); //构建数据包接收数据: //创建字节数组 byte[] buf = new byte[100]; //创建数据包对象,它的长度不能超过数组的长度,我们把它设为100 DatagramPacket dp = new DatagramPacket(buf, 100); //接收数据 ds.receive(dp); //打印数据 //getLength方法返回实际接收数;getData方法返回数据,返回格式为字节数组 System.out.println(new String(buf, 0, dp.getLength())); //给客户端答复 String str = "Welcome you!"; //getAddress()、getPort()方法,可获得发送数据时的ip地址、端口号 DatagramPacket dpSend = new DatagramPacket( str.getBytes(), str.length(), dp.getAddress(), dp.getPort()); ds.send(dpSend); ds.close(); } catch (Exception ex) { ex.printStackTrace(); } }
三、基于UDP客户端程序的编写
/** * 基于UDP客户端程序的编写 */ public static void send() { try { //创建一个数据报对象。 DatagramSocket ds = new DatagramSocket(); //要发送的数据 String str = "Hello,this is zhangsan"; //构造一个发送数据包: //InetAddress.getByName("localhost"):获得本地ip地址 //端口号指定为6000 DatagramPacket dp = new DatagramPacket( str.getBytes(), str.length(), InetAddress.getByName("localhost"), 6000); //发送数据包 ds.send(dp); //创建字节数组 byte[] buf = new byte[100]; //构建接收数据的数据包 DatagramPacket dpRecv = new DatagramPacket(buf, 100); //接收数据 ds.receive(dpRecv); //打印数据 System.out.println(new String(buf, 0, dpRecv.getLength())); //关闭数据报套接字 ds.close(); } catch (Exception ex) { ex.printStackTrace(); } }
四、测试打印
我们首先启动接收端的recv方法,然后启动发送端的send方法,我们可以看到对于发送端来说,它收到了接收端给它回复的信息,如下图:
注意:
数据报套接字虽然不像我们TCP通信时要建立连接。但是当第一次数据发送成功之后,那么它也是相当于建立了一个虚连接,
那么双方之间都可以发送数据和读取数据。
五、系列文章(java网络编程)
转载地址:https://blog.csdn.net/YuDBL/article/details/86070575 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月08日 16时45分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
jsDelivr使用小记
2021-07-02
AJAX_ Asynchronous JavaScript and XML
2021-07-02
Vue_基本入门
2021-07-02
Java(1)
2021-07-02
Java(2)
2021-07-02
Java(3)
2021-07-02
react使用antd警告:Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance
2021-07-02
react 使用router 和 ts 进行页面跳转报错
2021-07-02
更改vue项目的浏览器图标与标头
2021-07-02
HTML5之Validation Plugin表单插件使用(仅供参考)
2021-07-02
HTML5简单轮播的实现(使用JQuery)
2021-07-02
MongoDB数据库安装
2019-04-29
MongoDB数据库安装完成之后的配置
2019-04-29
Mongo数据库使用
2019-04-29
弹性布局做导航
2019-04-29
使用setTimeout()实现setInterval()功能
2019-04-29
jQuery鼠标经过显示二级导航菜单(用less写的)
2019-04-29
canvas刮涂层抽奖
2019-04-29
axios接收后台图片二进制流显示到前端
2019-04-29