网络编程——UDP协议的实践(词典翻译服务器(英译汉))
词典翻译
- 服务器
- 基本服务器
- 客户端
- 测试
客户端输入英文服务器返回汉语
服务器
基本服务器
import java.io.IOException;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpEchoServer {// 对于一个服务器程序来说, 核心流程也是要分成两步.// 1. 进行初始化操作 (实例化 Socket 对象)// 2. 进入主循环, 接受并处理请求. (主循环就是一个 "死循环")// a) 读取数据并解析// b) 根据请求计算响应// c) 把响应结果写回到客户端.private DatagramSocket socket = null;public UdpEchoServer(int port) throws SocketException {socket = new DatagramSocket(port);}public void start() throws IOException {System.out.println("服务器启动");while (true) {// a) 读取请求并解析.DatagramPacket requestPacket = new DatagramPacket(new byte[4096], 4096);socket.receive(requestPacket);String request = new String(requestPacket.getData(),0, requestPacket.getLength()).trim();// b) 根据请求计算响应String response = process(request);// c) 把响应写回给客户端, 响应数据就是 response, 需要包装成一个 Packet 对象DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),response.getBytes().length, requestPacket.getSocketAddress());socket.send(responsePacket);// [这是一个锦上添花的操作] 打印一条请求日志.System.out.printf("[%s:%d] req: %s; resp: %s\n", requestPacket.getAddress().toString(),requestPacket.getPort(), request, response);}}public String process(String request) {// 由于此处是一个 echo server, 请求内容是啥, 响应内容就是啥.// 如果是一个更复杂的服务器, 此处就需要包含很多的业务逻辑来进行具体的计算.return request;}}
字典服务器继承基本服务器,并重写process方法
import java.io.IOException;
import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;public class UdpDicServer extends UdpEchoServer {private Map<String,String> dict = new HashMap<>();public UdpDicServer(int port) throws SocketException {super(port);dict.put("cat","猫");dict.put("dog","狗");dict.put("bed","床");dict.put("water","水");dict.put("sun","太阳");dict.put("moon","月亮");}@Overridepublic String process(String request) {return dict.getOrDefault(request,"超出词典范围");}public static void main(String[] args) throws IOException {UdpDicServer server = new UdpDicServer(9090);server.start();}
}
客户端
客户端保持不变
import java.io.IOException;
import java.net.*;
import java.util.Scanner;public class UdpEchoClient {// 客户端的主要流程分成四步.// 1. 从用户这里读取输入的数据.// 2. 构造请求发送给服务器// 3. 从服务器读取响应// 4. 把响应写回给客户端.private DatagramSocket socket = null;private String serverIp;private int serverPort;// 需要在启动客户端的时候来指定需要连接哪个服务器public UdpEchoClient(String serverIp, int serverPort) throws SocketException {this.serverIp = serverIp;this.serverPort = serverPort;socket = new DatagramSocket();}public void start() throws IOException {Scanner scanner = new Scanner(System.in);while (true) {// 1. 读取用户输入的数据System.out.print("-> ");String request = scanner.nextLine();if (request.equals("exit")) {break;}// 2. 构造请求发送给服务器DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length, InetAddress.getByName(serverIp), serverPort);socket.send(requestPacket);// 3. 从服务器读取响应DatagramPacket responsePacket = new DatagramPacket(new byte[4096], 4096);socket.receive(responsePacket);String response = new String(responsePacket.getData(), 0, responsePacket.getLength()).trim();// 4. 显示响应数据System.out.println(response);}}public static void main(String[] args) throws IOException {UdpEchoClient client = new UdpEchoClient("127.0.0.1", 9090);//UdpEchoClient client = new UdpEchoClient("47.98.116.42", 9090);client.start();}
}
测试
网络编程——UDP协议的实践(词典翻译服务器(英译汉))相关推荐
- 6、linux网络编程--UDP协议编程
一.概述: UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议.UDP 不提供可 ...
- python网络编程—UDP协议
一.UDP协议特点: UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送.UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之 ...
- python实现调用百度词典接口实现英译汉、汉译英
话不多说,直接上贴代码. #!/usr/bin/python3 # coding=utf-8import requests #import sys import json# query_url = & ...
- Java网络编程UDP协议--模拟英雄联盟游戏聊天骂人变*--优化网络环境从你我做起
模拟英雄联盟聊天功能:实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,然后服务器端也可以输入信息,同样信息在客户端和服务端显示. 本案使用了正则表达式将接 ...
- 标书翻译,英译汉翻译二战纪实性资料
近日,经过持续近一个多月,共计3轮的激烈角逐,英信翻译从众多翻译公司中脱颖而出,成功中标一个大型二战史料翻译项目.该项目共计40万单词,分为4本书,原文为英文,需要在今年年底前翻译为中文并全部交付出版 ...
- JAVA零学习之基础归纳(十八)--网络编程、协议、IP、基本API、URL、socket等
[Java程序可以非常方便的访问互联网上的 HTTP服务.FTP服务等,并可以直接取得互联网上的远程资源,还可以向远程资源发送 GET.POST请求] 一.网络编程 1.1 网络概念和分类 所谓计算机 ...
- (转)C#网络编程(订立协议和发送文件) - Part.4
源码下载:http://www.tracefact.net/SourceCode/Network-Part4.rar C#网络编程(订立协议和发送文件) - Part.4 文件传输 前面两篇文章所使用 ...
- windows网络编程——telnet协议
1.windows网络编程--telnet协议 Telnet是最老的Internet应用,起源于1969年的ARPANET,名字是"电信网络协议(TelecommuicationNetwo ...
- c++网络编程UDP
c++网络编程UDP 服务器端: #include<WinSock2.h> #include<iostream>#pragma comment(lib,"ws2_32 ...
最新文章
- AngularJS之Service(四)
- 第一百五十一节,封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全...
- python用正则表达式提取中文_用正则表达式从Python中的字符串中提取数字
- LC60 Permutation Sequence
- 巴比特观察 | NFT朋克热潮:CryptoPunks的成功可以复制吗
- 小程序毕设作品之微信校园洗衣小程序毕业设计成品(6)开题答辩PPT
- bch编码c语言有库么,BCH码的译码方法与流程
- 计算机自配,手把手教你选择电脑配件,自己动手配置一台低价高能DIY计算机
- 数字媒体技术在计算机技术中的应用,浅谈数字媒体技术的主要应用及发展趋势...
- Mac怎么方便看节假日安排,添加中国法定节假日安排
- maya2011安装方法图文详细教程及Unity下载
- 五行灵根 鸿蒙珠,异世鸿蒙武神
- Gvim开发环境配置笔记--Windows篇(转)
- 棋盘算法c语言程序,骑士走棋盘算法
- 如何在Java中实现画图(图文并茂)(内附美丽的分型图片哦)
- Regex.Replace( )
- 外包公司程序员的水平真的很垃圾吗?
- Code 39码详细介绍
- solrCloud选举leader的逻辑分析
- 若干年后再次的感动 --- 仙剑奇侠传