欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > java网络通信(二):UDP通信、实现客户端-服务端消息通信

java网络通信(二):UDP通信、实现客户端-服务端消息通信

2025/2/21 3:37:30 来源:https://blog.csdn.net/rainingCSDN/article/details/144042997  浏览:    关键词:java网络通信(二):UDP通信、实现客户端-服务端消息通信

目录

1、什么是UDP通信

2、服务端代码+注释

3、客户端代码+注释

4、代码运行和解释


简介:本文章主要是用java代码用UDP协议实现网络通信,实现客户端给服务端发送消息,服务端接收消息的功能。

不了解通信的同学可以先看看我上一篇发的文章,很详细

java网络通信(一):BS架构、CS架构、IP地址、端口号、协议、域名等基础概念,以及代码演示-CSDN博客

1、什么是UDP通信

UDP就是一个无连接,不可靠的连接

可以理解为把手上的数据包装好,丢给目的地址就完事了,管你有没有收到,反正我发了。

举个好懂的UDP通信例子:

你要给你朋友一把糖果

你手上有一个盒子,里面装着一些糖果,你朋友手上也有一个盒子,等着你把糖果给她,但是你们之间有一定的距离,那怎么办呢?那你就要知道你朋友的位置,然后把手上盒子里的糖果一抛(抛完你就不管了),你朋友拿她手上的盒子一接。至于你朋友接到多少个糖果或者接到没有,不告诉你,你也不关心,反正你抛出去了。

这样你和你朋友就完成了通信。

2、服务端代码+注释

public class UDP_OneToOne_Server {public static void main(String[] args) throws Exception {System.out.println("----服务端启动----");//1、创建服务端对象,注册端口DatagramSocket socket  = new DatagramSocket(6666);//2、创建一个数据包对象,用于接收数据,udp协议一包数据不会超过64kb,所以用64kb接是刚好的byte[] buffer = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buffer,buffer.length);//3、用数据包来接收客户端发来的数据socket.receive(packet);//获取本次数据包接收了多少数据int length = packet.getLength();//4、数据包接收到数据,字节数组已经有数据,我们有多少就读取多少String rs = new String(buffer,0,length);System.out.println(rs);//这个写法也可以读取到消息
//        String rs2 = new String(packet.getData());
//        System.out.println(rs2);// 接收客户端的ip地址以及端口号System.out.println(packet.getAddress().getHostAddress());System.out.println(packet.getPort());socket.close();}
}

3、客户端代码+注释

public class UDP_OneToOne_Client {public static void main(String[] args) throws Exception {//1、创建客户端对象,调用无参的构造方法会随机给客户端分配一个端口号DatagramSocket socket = new DatagramSocket();//2、创建数据包对象,封装要发出去的数据/*** 参数一:要发出去的数据(字节)* 参数二:要发出去的数据的大小(字节个数)* 参数三:服务端的IP地址(找到服务器主机)* 参数四:服务端程序端口号*/byte[] bytes = "我是UDP的客户端对象,测试发生数据".getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);//3、把这个数据包发送出去socket.send(packet);System.out.println("发送数据包出去!");//4、释放资源socket.close();}
}

4、代码运行和解释

 第一步先启动服务端:

在客户端还没启动之前,服务端一直在等待客户端的消息

看日志可以看到,服务端启动之后一直挂着

程序是卡在了socket.receive(packet);这一步

直到客户端启动,发送数据给服务端,服务端接收到数据之后才开始往下走。

第二步再启动客户端:

可以看到客户端将数据包发送出去了

我们再返回去看服务端的控制台,就能看到服务台接收到了消息。

注意:记得释放资源,不然会一直占用网卡资源,耗费内存

服务端只负责接收数据包,无论是哪个客户端发送的数据包(在UDP协议中,我们可以多开几个客户端给同一个服务端发送消息,无论是哪一个客户端发送的,服务端都能接收到)

这就是我对UDP通信相关的理解,希望能帮到大家,有问题的地方欢迎大家一起讨论!

后续会不断更新作品,欢迎大家一起讨论学习。❤❤❤

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词