【Java】网络编程-UDP字典服务器客户端简单代码编写

上文讲了UDP回响服务器客户端简单代码编写

本文将讲述UDP字典服务器客户端简单代码编写。所谓回显,就是指客户端向服务器发送一个报文,从服务器那里得到一条一模一样的回响报文

而我们的字典功能呢,则是实现了输入中文,得到对应的英文

1、代码讲解

要实现这个功能,我们只需要对process()方法进行修改,即对处理request,返回response这个功能进行修改

要实现字典功能,我们在构造方法里定义一个Map数据结构,在Map中放入要翻译的词汇

public UdpDictServer(int port) throws SocketException {socket = new DatagramSocket(port);map.put("小狗","dog");map.put("小猫","cat");map.put("猪猪","pig");
}

然后对process()方法进行修改

public static String process(String key){return map.get(key);
}

其余代码与回响程序相同 

2、完整代码

服务器端完整代码

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;public class UdpDictServer {public static DatagramSocket socket = null;static Map<String,String> map = new HashMap<>();public UdpDictServer(int port) throws SocketException {socket = new DatagramSocket(port);map.put("小狗","dog");map.put("小猫","cat");map.put("猪猪","pig");}public static void start() throws IOException {System.out.println("服务器开始!");while (true){DatagramPacket requestPacket = new DatagramPacket(new byte[1024],1024);socket.receive(requestPacket);String request = new String(requestPacket.getData(),0,requestPacket.getLength());String response = process(request);DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),response.getBytes().length, requestPacket.getSocketAddress());socket.send(responsePacket);System.out.printf("[%s:%d] rec:%s,resp:%s",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);}}public static String process(String key){return map.get(key);}public static void main(String[] args) throws IOException {UdpDictServer server = new UdpDictServer(9090);server.start();}
}

客户端完整代码

import UDPecho.UdpEchoClient;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;public class UdpDictClient {public static DatagramSocket socket = null;private static String ip = null;private static int port = 0;public UdpDictClient(String ip,int port) throws SocketException {socket = new DatagramSocket();this.ip = ip;this.port = port;}public static void start() throws IOException {System.out.println("客户端开始");Scanner scanner = new Scanner(System.in);while (true){System.out.print("->");String request = scanner.next();DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length, InetAddress.getByName(ip),port);socket.send(requestPacket);DatagramPacket responsePacket = new DatagramPacket(new byte[1024],1024);socket.receive(responsePacket);String response = new String(responsePacket.getData(),0,responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {UdpDictClient client = new UdpDictClient("127.0.0.1",9090);client.start();}
}

实现结果

​​​​​​​

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

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

相关文章

智能物联网汽车3d虚拟漫游展示增强消费者对品牌的认同感和归属感

汽车3D虚拟展示系统是一种基于web3D开发建模和VR虚拟现实技术制作的360度立体化三维汽车全景展示。它通过计算机1:1模拟真实的汽车外观、内饰和驾驶体验&#xff0c;让消费者在购车前就能够更加深入地了解车辆的性能、特点和设计风格。 华锐视点云展平台是一个专业的三维虚拟展…

Pytorch:backward()函数详解

.backward() .backward() 是 PyTorch 中用于自动求导的函数&#xff0c;它的主要作用是计算损失函数对模型参数的梯度&#xff0c;从而实现反向传播算法。 在深度学习中&#xff0c;我们通常使用梯度下降算法来更新模型参数&#xff0c;使得模型能够逐步逼近最优解。 在梯度下…

linux中deadline调度原理与代码注释

简介 deadline调度是比rt调度更高优先级的调度&#xff0c;它没有依赖于优先级的概念&#xff0c;而是给了每个实时任务一定的调度时间&#xff0c;这样的好处是&#xff1a;使多个实时任务场景的时间分配更合理&#xff0c;不让一些实时任务因为优先级低而饿死。deadline调度…

(保姆级教程)一篇文章,搞定所有Linux命令,以及tar解压缩命令,wget、rpm等下载安装命令,Linux的目录结构,以及用户和用户组

文章目录 Linux命令1. Linux目录结构2. 基本命令&#xff08;了解&#xff09;3. 目录&#xff08;文件夹&#xff09;命令列出目录切换目录创建目录删除目录复制目录移动和重命名目录 4. 文件命令创建文件编辑文件编辑文件时的其他操作 查看文件移动/重命名文件复制文件删除文…

机器学习---聚类(原型聚类、密度聚类、层次聚类)

1. 原型聚类 原型聚类也称为“基于原型的聚类” (prototype-based clustering)&#xff0c;此类算法假设聚类结构能通过一 组原型刻画。算法过程&#xff1a;通常情况下&#xff0c;算法先对原型进行初始化&#xff0c;再对原型进行迭代更新求解。著 名的原型聚类算法&#…

基于Redis限流(aop切面+redis实现“令牌桶算法”)

令牌桶算法属于流量控制算法&#xff0c;在一定时间内保证一个键&#xff08;key&#xff09;的访问量不超过某个阈值。这里的关键是设置一个令牌桶&#xff0c;在某个时间段内生成一定数量的令牌&#xff0c;然后每次访问时从桶中获取令牌&#xff0c;如果桶中没有令牌&#x…

【机器学习】梯度下降法:从底层手写实现线性回归

【机器学习】Building-Linear-Regression-from-Scratch 线性回归 Linear Regression0. 数据的导入与相关预处理0.工具函数1. 批量梯度下降法 Batch Gradient Descent2. 小批量梯度下降法 Mini Batch Gradient Descent&#xff08;在批量方面进行了改进&#xff09;3. 自适应梯度…

C++相关闲碎记录(17)

1、IO操作 &#xff08;1&#xff09;class及其层次体系 &#xff08;2&#xff09;全局性stream对象 &#xff08;3&#xff09;用来处理stream状态的成员函数 前四个成员函数可以设置stream状态并返回一个bool值&#xff0c;注意fail()返回是failbit或者badbit两者中是否任一…

【重点】【DP】152.乘积最大的子数组

题目 法1&#xff1a;DP 参考&#xff1a;https://blog.csdn.net/Innocence02/article/details/128326633 f[i]表示以i结尾的连续子数组的最大乘积&#xff0c;d[i]表示以i结尾的连续子数组的最小乘积 。 如果只有正数&#xff0c;我们只需要考虑最大乘积f[i]&#xff1b;有负…

MATLAB - Gazebo 仿真环境

系列文章目录 前言 机器人系统工具箱&#xff08;Robotics System Toolbox™&#xff09;为使用 Gazebo 模拟器可视化的模拟环境提供了一个界面。通过 Gazebo&#xff0c;您可以在真实模拟的物理场景中使用机器人进行测试和实验&#xff0c;并获得高质量的图形。 Gazebo 可在…

c# OpenCV 基本绘画(直线、椭圆、矩形、圆、多边形、文本)(四)

我们将在这里演示如何使用几何形状和文本注释图像。 Cv2.Line() 绘制直线 Cv2.Ellipse() 绘制椭圆Cv2.Rectangle() 绘制矩形Cv2.Circle() 绘制圆Cv2.FillPoly() 绘制多边形Cv2.PutText() 绘制文本 一、绘制直线 Cv2.Line(image, start_point, end_point, color, thickness) …

从传统型数据库到非关系型数据库

一 什么是数据库 数据库顾名思义保存数据的仓库&#xff0c;其本质是一个具有数据存储功能的复杂系统软件&#xff0c;数据库最终把数据保存在计算机硬盘&#xff0c;但数据库并不是直接读写数据在硬盘&#xff0c;而是中间隔了一层操作系统&#xff0c;通过文件系统把数据保存…

2023ChatGPT浪潮,2024开源大语言模型会成王者?

《2023ChatGPT浪潮&#xff0c;2024开源大语言模型会成王者&#xff1f;》 一、2023年的回顾 1.1、背景 我们正迈向2023年的终点&#xff0c;回首这一年&#xff0c;技术行业的发展如同车轮滚滚。尽管互联网行业在最近几天基本上处于冬天&#xff0c;但在这一年间我们仍然经…

递归经典三题

目录1.斐波那契数列&#xff1a; 2.青蛙跳台阶问题&#xff1a; 3.汉诺塔问题 1.斐波那契数列&#xff1a; 由斐波那契数列从第三项开始&#xff0c;每一项等于前两项之和&#xff0c;可以使用递归计算给定整数的斐波那契数。 1&#xff0c;1&#xff0c;2&#xff0c;3&am…

酒水品牌网站建设的效果如何

酒是人们餐桌常常出现的饮品&#xff0c;市场中的大小酒品牌或经销商数量非常多&#xff0c;国内国外都有着巨大市场&#xff0c;酒讲究的是品质与品牌&#xff0c;信息发展迅速的时代&#xff0c;商家们都希望通过多种方式获得生意增长。 酒商非常注重品牌&#xff0c;消费者也…

为什么要编写测试用例,测试用例写给谁看?

“为什么要编写测试用例&#xff0c;测试用例写给谁看”&#xff0c;这个问题看似简单&#xff0c;但却涵盖了一系列复杂的考虑因素&#xff0c;并不太好回答。 为了向各位学测试的同学们解释清楚“为什么编写测试用例是至关重要的”&#xff0c;我将通过以下5个方面进行展开&…

EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现(二)EEMD

往期精彩内容&#xff1a; 风速预测&#xff08;一&#xff09;数据集介绍和预处理-CSDN博客 风速预测&#xff08;二&#xff09;基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测&#xff08;三&#xff09;EMD-LSTM-Attention模型-CSDN博客 风速预测&#xff08;四&#xf…

鸿蒙 - arkTs:渲染(循环 - ForEach,判断 - if)

ForEach循环渲染&#xff1a; 参数&#xff1a; 要循环遍历的数组&#xff0c;Array类型遍历的回调方法&#xff0c;Function类型为每一项生成唯一标识符的方法&#xff0c;有默认生成方法&#xff0c;非必传 使用示例&#xff1a; interface Item {name: String,price: N…

作物模型中引入灌溉参数

在没有设置灌溉时,土壤水分模拟结果如下找到了PCSE包中田间管理文件的标准写法 在agromanager.py中有详细的信息(如何设置灌溉以及施肥量) Version: 1.0 AgroManagement: - 2022-10-15:CropCalendar:crop_name: sugar-beetvariety_name: