用UDP写一个回显服务器和一个字典服务器

回显服务器


  操作系统提供了一些网络通信的api(socket)。

如:

回显服务器:请求是啥?响应就是啥。

一个正常的服务器要做三件事情:

1. 读取请求并解析。

2. 根据请求计算响应。

3. 把响应写回给客户端。


服务器对象


第一步:创建socket对象,并初始化。

这里的port是服务器的端口号。


第二步:读取请求并解析。

这里的一个包的大小自己定义好了。一次读取4096个字节。


第三步:根据请求计算响应。

这里是回显服务器,所以请求是什么响应就是什么。


第四步:把响应写回给客户端。

这里调用的都是封装好的api。


第五步:创建服务器对象,启动服务器。

这里的9090就是自定义的,端口号。


以上服务端就写好了。


客户端对象


如图:

以上基本是整个代码的流程。


这里和服务器其实差不太多。

如图:

这里类的属性多了IP和Port,其实就是IP地址和端口。


总代码:

package network;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpEchoServer {private DatagramSocket socket = null;public UdpEchoServer(int port) throws SocketException {socket = new DatagramSocket(port);}public void start() throws IOException {System.out.println("服务器启动");while(true){//读取请求并解析。DatagramPacket requestPacket = new DatagramPacket(new byte[4096] , 4096);socket.receive(requestPacket);//为了在Java代码中,方便处理,我们就可以吧上述的数据包就可以转换成String。String request = new String(requestPacket.getData() , 0 , requestPacket.getLength());//根据请求,计算响应.String response = this.process(request);//把响应写回给客户端。DatagramPacket responsePacket = new DatagramPacket(response.getBytes() , 0 , response.getBytes().length ,requestPacket.getSocketAddress());socket.send(responsePacket);System.out.printf("[%s:%d] req=%s resq=%s\n" , requestPacket.getAddress() , requestPacket.getPort(),request , response);}}public String process(String request){return request;}public static void main(String[] args) throws IOException {UdpEchoServer server = new UdpEchoServer(9090);server.start();}}
package network;import java.io.IOException;
import java.net.*;
import java.util.Scanner;public class UdpEchoClient {private DatagramSocket socket = null;private String serverIp;private int serverport;public UdpEchoClient(String serverIp , int serverport) throws SocketException {socket = new DatagramSocket();this.serverIp = serverIp;this.serverport = serverport;}public void start() throws IOException {System.out.println("客户端启动");Scanner sc = new Scanner(System.in);while(true){System.out.println("请输入,要发送的请求:");String request = sc.next();DatagramPacket requestPacket = new DatagramPacket(request.getBytes() , 0 , request.getBytes().length ,InetAddress.getByName(serverIp) , serverport);socket.send(requestPacket);DatagramPacket responsePacket = new DatagramPacket(new byte[4090] , 4090);socket.receive(responsePacket);//把响应显示到控制台上String response = new String(responsePacket.getData() , 0 , responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {UdpEchoClient client = new UdpEchoClient("127.0.1" , 9090);client.start();}}

以上就是回显服务器的总代码。

结果如图:


字典服务器


这里的字典服务器,其实就是把解析客户端的请求进行重写就行了。

做一个字典,用map对象,来输入键值对,调用map方法进行查询。

如图:

上述的服务器,继承了回显服务器,重写了process方法就实现了。

客户端的代码不变。


代码:

package network;import java.io.IOException;
import java.net.SocketException;
import java.util.HashMap;public class UdpDictServer extends UdpEchoServer {HashMap<String,String> dict = null;public UdpDictServer(int port) throws SocketException {super(port);dict = new HashMap<>();dict.put("hello" , "你好");dict.put("cat" , "小猫");dict.put("dog" , "小狗");dict.put("pig" , "小猪");}@Overridepublic String process(String request){return dict.getOrDefault(request , "该词汇未查询到");}public static void main(String[] args) throws IOException {UdpDictServer server = new UdpDictServer(9090);server.start();}}

结果如图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ETAS CP AUTOSAR工具链】ARXML文件详解

本篇文章首先对ARXML这种文件格式做了一个概述&#xff0c;叙述了这种标签语言的基本语法&#xff08;如果您用HTML做过网页&#xff0c;那么这种格式您一定不会陌生&#xff09;&#xff0c;然后对ARXML文件都会包含的一些基本信息做了详细的解读&#xff0c;最后基于使用ISOL…

Android:使用Kotlin搭建MVP架构模式

一、简介Android MVP架构模式 MVP全称&#xff1a;Model、View、Presenter&#xff1b; View&#xff1a;负责视图部分展示Model&#xff1a;负责数据的请求、解析、过滤等数据层操作。Presenter&#xff1a;View和Model交互的桥梁。对应MVC中的C&#xff08;controller&#x…

01.爬虫---初识网络爬虫

01.初识网络爬虫 1.什么是网络爬虫2.网络爬虫的类型3.网络爬虫的工作原理4.网络爬虫的应用场景5.网络爬虫的挑战与应对策略6.爬虫的合法性总结 1.什么是网络爬虫 网络爬虫&#xff0c;亦称网络蜘蛛或网络机器人&#xff0c;是一种能够自动地、系统地浏览和收集互联网上信息的程…

路由聚合和VRRP技术

实验拓扑图&#xff1a; 实验需求 1、内网IP地址使用172.16.0.0/16 2、SW1和SW2之间互为备份&#xff1b; 3、VRRP/stp/vlan/eth-trunk均使用&#xff1b; 4、所有pc均通过DHCP获取IP地址&#xff1b; 5、ISP只配置IP地址&#xff1b; 6、所有电脑可以正常访问ISP路由器环…

【学习笔记】Windows GDI绘图(五)图形路径GraphicsPath详解(上)

文章目录 图形路径GraphicsPath填充模式FillMode构造函数GraphicsPath()GraphicsPath(FillMode)GraphicsPath(Point[],Byte[])和GraphicsPath(PointF[], Byte[])GraphicsPath(Point[], Byte[], FillMode)和GraphicsPath(PointF[], Byte[], FillMode)PathPointType 属性FillMode…

[LLM-Agent]万字长文深度解析规划框架:HuggingGPT

HuggingGPT是一个结合了ChatGPT和Hugging Face平台上的各种专家模型&#xff0c;以解决复杂的AI任务&#xff0c;可以认为他是一种结合任务规划和工具调用两种Agent工作流的框架。它的工作流程主要分为以下几个步骤&#xff1a; 任务规划&#xff1a;使用ChatGPT分析用户的请求…

成犬必备!福派斯鲜肉狗粮,亮毛祛泪痕的神奇功效!

对于成犬来说&#xff0c;选择一款合适且高质量的狗粮至关重要。成犬时期的狗狗正处于身体和生理机能逐渐稳定的阶段&#xff0c;因此&#xff0c;需要选择能够满足其日常营养需求、维持健康状态并有助于长寿的狗粮。理想的狗粮应当包含狗狗所需的各种营养物质&#xff0c;如高…

齐护K210系列教程(三十一)_视觉小车

视觉小车 齐护编程小车端程序动作说明联系我们 在经常做小车任务项目时会用的K210的视觉与巡线或其它动作结合&#xff0c;这就关系到要将K210的识别结果传送给小车的主控制器&#xff0c;K210为辅助传感器&#xff08;视觉采集&#xff09;。 这节课我们用K210识别图像&#x…

Java 解决 古典问题

1 问题 编写一个Java程序&#xff0c;解决以下问题&#xff1a; 2 方法 再导入java.util包下的Scanner类&#xff0c;构建Scanner对象&#xff0c;以便输入。通过对问题的分析&#xff0c;我们可以得到&#xff0c;当位数为1时&#xff0c;其返回值为1&#xff1b;当位数为2时&…

IDEA 将多个微服务Springboot项目Application启动类添加到services标签,统一启动、关闭服务

IDEA 将多个微服务Springboot项目Application启动类添加到services标签&#xff0c;统一启动、关闭服务 首先在Views > Tool Windows > Services 添加services窗口 点击services窗口&#xff0c;首次需要添加配置类型&#xff0c;我们选择Springboot 默认按照运行状态分…

微软如何打造数字零售力航母系列科普11 - 什么是Microsoft Fabric中的数据工程?

什么是Microsoft Fabric中的数据工程&#xff1f; 目录 1. Lakehouse(湖边小屋) 2. Apache Spark Job Definition (作业定义) 3. Notebook(笔记本) 4. Data Pipeline (数据管道) Microsoft Fabric中的数据工程使用户能够设计、构建和维护基础架构和系统&#xff0c;使其组…

LabVIEW舱段测控系统开发

LabVIEW舱段测控系统开发 在航空技术飞速发展的当下&#xff0c;对于航空器的测控系统的需求日益增加&#xff0c;特别是对舱段测控系统的设计与实现。开发了一款基于LabVIEW开发的舱段测控系统&#xff0c;包括系统设计需求、系统组成、工作原理以及系统实现等方面。 开发了…

柱状图中最大的矩形 - LeetCode 热题 73

大家好&#xff01;我是曾续缘&#x1f61b; 今天是《LeetCode 热题 100》系列 发车第 73 天 栈第 5 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xf…

MyBatis实用方案,如何使项目兼容多种数据库

系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难&#xff0c;MyBatis动态Sql标签解析 Mybatis的CachingExecutor与二级缓存 使用MybatisPlus还是MyBaits &#xff0c;开发者应该如何选择&#xff1f; 巧…

【问题处理】maven一直提示artemis-http-client-1.1.8.jar报错(2024-05-25)

项目使用了视频监控&#xff0c;里面涉及到海康威视的视频监控。 问题&#xff1a; pom在导入maven时&#xff0c;报错“Could not find artifact com.artemis:http-client:jar:1.1.8 ” 原因&#xff1a; 根据平台提供的maven地址&#xff0c;填写进pom文件中&#xff0c;编…

汇编-16位汇编环境搭建

16位汇编环境 在学习16位汇编时&#xff0c;我选择的环境是在VMware中安装Windows XP虚拟机来学习&#xff1b;因为Windows XP提供了兼容的DOS环境&#xff0c;可以直接运行和调试16位汇编程序&#xff1b;在win10&#xff0c;win11环境中原生不支持直接运行 16 位程序&#x…

房地产画册制作成手机在线翻页效果

​随着科技的飞速发展&#xff0c;移动互联网已经深入到人们的日常生活中。在这个数字化的时代&#xff0c;房地产行业也紧跟潮流&#xff0c;将画册制作成手机在线翻页效果&#xff0c;以满足消费者的阅读习惯。 房地产画册制作成手机在线翻页效果&#xff0c;不仅能够满足消费…

mac清理软件推荐免费 mac清理系统数据怎么清理 cleanmymac和腾讯柠檬哪个好

macbook是苹果公司的一款高性能的笔记本电脑&#xff0c;受到了很多用户的喜爱。但是&#xff0c;随着使用时间的增长&#xff0c;macbook的系统也会积累一些垃圾文件&#xff0c;影响其运行速度和空间。那么&#xff0c;macbook系统清理软件推荐有哪些呢&#xff1f;macbook用…

263 基于matlab得到的频分复用(FDM,Frequency Division Multiplexing)实现

基于matlab得到的频分复用(FDM&#xff0c;Frequency Division Multiplexing)实现&#xff0c;仿真时录入三路声音信号进行处理&#xff0c;将用于传输信道的总带宽划分成三个子频带&#xff0c;经过复用以后再将录入的声音信号恢复出来。程序已调通&#xff0c;可直接运行。 2…

Docker | 基础指令

环境&#xff1a;centos8 参考&#xff1a; 安装 Docker | Docker 从入门到实践https://vuepress.mirror.docker-practice.com/install/ 安装Docker 卸载旧版本&#xff0c;安装依赖包&#xff0c;添加yum软件源&#xff0c;更新 yum 软件源缓存&#xff0c;安装 docker-ce…