简单的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

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho