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

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu