java网络编程:13、基于UDP的socket编程(三)实现相互发送接收消息
发布日期:2021-06-29 01:43:18
浏览次数:3
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月05日 22时08分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
超融合与云计算的区别是什么?
2019-04-29
SuperSocket
2019-04-29
修改ant design的tooltip组件中的字体颜色(2分钟解决战斗)
2019-04-29
参观邓小平故居有感
2019-04-29
教你如何查看linux版本
2019-04-29
Linux下利用crontab执行任务
2019-04-29
RedHat Linux下注册Apache为系统服务
2019-04-29
使用LoadRunner监控Apache的步骤
2019-04-29
LoadRunner录制脚本时报加载GrooveUtil.dll出错的解决方法
2019-04-29
用Spotlight实时监控Windows Server 2008
2019-04-29
Tomcat 6.0.32中调整JVM大小及最大线程数
2019-04-29
Mysql数据库下载及安装
2019-04-29
MySql安装时解决要输入current root password的方法
2019-04-29
Linux下free命令详解
2019-04-29
Linux下启动rpc时提示Cannot register service: RPC: Unableto receive; errno = Connectionrefused的问题
2019-04-29
Google纪念遗传学之父孟德尔诞辰一百周年图标
2019-04-29
在Apache下配置多个虚拟主机站点
2019-04-29
Apache中目录权限访问控制配置
2019-04-29
Apache的认证和授权配置
2019-04-29