简单的UDP代码 客户端+服务器 (网络真好玩,发什么自动回复什么,还能查字典呢,一起来玩呀)

本文主要是介绍简单的UDP代码 客户端+服务器 (网络真好玩,发什么自动回复什么,还能查字典呢,一起来玩呀),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.简单的UDP echo 服务器+客户端
发什么,回什么

服务器端的代码如下

package udp.echo;import java.net.*;public class Server{
public static void main(String[] args) throws IOException{
//新建一个DatagramSocket
DatagramSocket udpServerSocket=new DatagramSocket(9898);  //连接的同时直接绑定9898端口,如果一台主机有多个网卡,就需要绑定IP+端口
//接下来等着收消息
byte[] receiveBuffer=new byte[1024];//传过来的是二进制数据流,需要一个字节数组来接收
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
udpServerSocket.receive(receivePacket);
InetAddress clientAddress=recievePacket.getAddress();
System.out.printf("我从 %s:%d 收到了消息%n",clientAddress.getHostAddress(),receivePacket.getport());
System.out.printf("我一共收到了%d字节的数据%n",receivePacket,getLength())
//需要将发过来的二进制数据流进行解码
String message=new String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
System.out.println(message);//收到消息了byte[] sendBuffer=message.getButes("UTF-8");
DatagramPacket sendPacket=new DatagramPact(sendBuffer,sendBuffer.length,clientAddress,receivePacket.getPort());
udpServerSocket.send(sendPacket);udpServerSocket.close();  //最后要关闭连接
}

客户端的代码如下:

package udp.echo;import java.net.*;public class Client{public static void main(String[] args) throws IOException{//建立连接DatagramSocket clientSocket=new DatagramSocket(); //客户端不需要绑定端口啥的,直接发送数据String message="收到我的消息没?";//需要将这个文本转成字节型的byte[] sendBuffer=message.getBytes("UTF-8");//默认使用UTF-8编解码,但是推荐写上//构建DatagramPacketbyte[] serverIP=new byte[4];//地址是IPv4类型的,所以是4位//我要发送给本机,本机默认IP地址是127.0.0.1  改成别的主机的IP不同设备互动会更有意思哦(*^^*)serverIP[0]=127;serverIP[1]=0;serverIP[2]=0;serverIP[3]=1;InetAddress serverAddress=InetAddress.getByAddress(serverIP);DatagramPacket sendPacket=new DatagramPacket(sendBuffer,sendBuffer.length,serverAddress,9898);//客户端要带着IP和端口,知道自己往哪儿发,端口号要和服务器那边一致udpClientSocket.send(sendPacket);//发送数据byte[] receiveBuffer=new byte[1024];
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
udpClientSocket.receive(receivePacket);
String responseMessage=new String(receivePacket.getData(),0,receivePacket.getLenth(),"UTF-8");
System.out.println("responseMessage");udpClientSocket.close(); //关闭连接

注意:1.无论是发送数据,还是接收数据都需要一个byte类型的数据,需要进行字节类型和字符类型的转换;
2.需要指定相同的编码方式;
3.服务器是先收后发,客户端是先发后收,其他都是类似的;
4.通过DatagramPacket 更加深入的理解UDP是面向报文的

2.把上面的代码稍加改动,就是一个查字典小工具啦

服务器的代码如下:

public class Server{
private static final Map<String,String> dict=new HashMap<>();
static{
dict.put("苹果","apple");
dict.put("梨","pear");
dict.put("桃子","peach");
dict.put("葡萄","grape");
dict.put("香蕉","banana");   //手动输进去有点low啊
}
public static void main(String[] args) throws IOException{
//新建一个DatagramSocket
DatagramSocket udpServerSocket=new DatagramSocket(9898);  //连接的同时直接绑定9898端口,如果一台主机有多个网卡,就需要绑定IP+端口
//接下来等着收消息
byte[] receiveBuffer=new byte[1024];//传过来的是二进制数据流,需要一个字节数组来接收
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer,receiveBuffer.length);
udpServerSocket.receive(receivePacket);
InetAddress clientAddress=recievePacket.getAddress();
System.out.printf("我从 %s:%d 收到了消息%n",clientAddress.getHostAddress(),receivePacket.getport());
System.out.printf("我一共收到了%d字节的数据%n",receivePacket,getLength())
//需要将发过来的二进制数据流进行解码
String message=new String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
System.out.println(message);//收到消息了String responseMessage=dict.getOrDefault(message,"我也不知道呀");byte[] sendBuffer=responseMessage.getButes("UTF-8");
DatagramPacket sendPacket=new DatagramPact(sendBuffer,sendBuffer.length,clientAddress,receivePacket.getPort());
udpServerSocket.send(sendPacket);udpServerSocket.close();  //最后要关闭连接
}

客户端的代码如下:

package udp.echo;import java.net.*;public class Client{public static void main(String[] args) throws IOException{//建立连接DatagramSocket clientSocket=new DatagramSocket(); //客户端不需要绑定端口啥的,直接发送数据while(true){Scanner scanner=new Scanner(System.in); String message=scanner.nextline();byte[] sendBuffer=message.getBytes("UTF-8");//默认使用UTF-8编解码,但是推荐写上//构建DatagramPacketbyte[] serverIP=new byte[4];//地址是IPv4类型的,所以是4位//我要发送给本机,本机默认IP地址是127.0.0.1  改成别的主机的IP不同设备互动会更有意思哦(*^^*)serverIP[0]=127;serverIP[1]=0;serverIP[2]=0;serverIP[3]=1;InetAddress serverAddress=InetAddress.getByAddress(serverIP);DatagramPacket sendPacket=new DatagramPacket(sendBuffer,sendBuffer.length,serverAddress,9898);//客户端要带着IP和端口,知道自己往哪儿发,端口号要和服务器那边一致udpClientSocket.send(sendPacket);//发送数据byte[] receiveBuffer=new byte[1024];
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
udpClientSocket.receive(receivePacket);
String responseMessage=new String(receivePacket.getData(),0,receivePacket.getLenth(),"UTF-8");
System.out.println("responseMessage");
}udpClientSocket.close(); //关闭连接

3.稍加改动就是一个聊天软件

聊天宝欢迎您嘞!

在这里插入图片描述
在这里插入图片描述

这篇关于简单的UDP代码 客户端+服务器 (网络真好玩,发什么自动回复什么,还能查字典呢,一起来玩呀)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/391717

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W