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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java多线程:4、Java对多线程的支持(二)后台线程setDaemon、暂停线程yield
下一篇:java网络编程:12、基于UDP的socket编程(二)代码通信-简单实例

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月08日 16时45分21秒