网络原理
UDP
傻瓜 智能 聊天机器人:
服务器端
package udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Server {
/**
* 服务器端-"智能"聊天机器人
*/
//端口号:
private static final int port = 1001;
//数据的最大值
private static final int blen = 1024;
public static void main(String[] args) throws IOException {
//1.启动服务器端
DatagramSocket socket = new DatagramSocket(port);
System.out.println("服务器端已启动!");
//循环输入
while(true) {
//2.初始化数据包
DatagramPacket clientPacket = new DatagramPacket(new byte[blen], blen);
//3.等待客户端连接
socket.receive(clientPacket);
System.out.println("连接客户端成功!");
//4.接收客户端消息
String msg = new String(clientPacket.getData());
System.out.println("接收到:"+msg);
//5.给客户端响应
String serMsg = msg.replace("吗?","!");//傻瓜机器人核心代码
//6.发送
DatagramPacket serverPacket = new DatagramPacket(
serMsg.getBytes(),
serMsg.getBytes().length,
clientPacket.getAddress(),
clientPacket.getPort()
);
socket.send(serverPacket);
}
}
}
客户端
package udp;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class Client {
/**
* 客户端-"智能"聊天机器人
*/
//服务器IP
private static final String ip = "127.0.0.1";
//服务器端口号:
private static final int port = 1001;
//数据的最大值
private static final int blen = 1024;
public static void main(String[] args) throws IOException {
//1.启动客户端
DatagramSocket client = new DatagramSocket();//客户端不需要传端口号
System.out.println("客户端已启动");
//输入
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("我:");
String msg = scanner.nextLine();
//2.发送消息
DatagramPacket clientPacket = new DatagramPacket(
msg.getBytes(),
msg.getBytes().length,
InetAddress.getByName(ip),
port
);
client.send(clientPacket);
//3.接收服务器返回信息
DatagramPacket serverPacket = new DatagramPacket(new byte[blen],blen);
client.receive(serverPacket);
String serMsg = new String(serverPacket.getData());
System.out.println("对方:"+serMsg);
}
}
}
注意:先启动服务器端再启动客户端
最终呈现:
TCP
傻瓜 智能 翻译机器人:
服务器端
package tcp;
import java.io.*;
import java.net.*;
import java.util.HashMap;
public class Server {
/**
* 服务器端-"智能" 翻译机器人
*/
//端口号
private static final int port = 1001;
//翻译
static HashMap<String, String> map = new HashMap<>();
static {
map.put("dog", "狗🐕");
map.put("cat", "猫🐱");
map.put("pig", "猪🐖");
}
public static void main(String[] args) throws IOException {
//1.启动服务器端
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器已启动!");
//2.等待连接客户端
Socket socket = serverSocket.accept();
//打印连接信息
System.out.println(String.format("已连接到客户端,ip:%s,port:%d",
socket.getInetAddress().getHostAddress(),
socket.getPort()
));//说明有客户端连接
//3.创建读写对象
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())
);
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream())
)
) {
while (true) {
//4.获取英文
String english = reader.readLine();
if (english != null && !english.equals("")) {
//5.翻译
String china = transEnglish(english);
//6.将结果给客户端
writer.write(china + "\n");//不能省略\n
writer.flush();// 将发送缓冲区的消息立即发送
}
}
}
}
private static String transEnglish(String english) {
String china = null;
china = map.get(english);
return china == null ? "未知" : china;
}
}
客户端
package tcp;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
/**
* 客户端-"智能" 翻译机器人
*/
//服务器IP
private static final String ip = "127.0.0.1";
//服务器端口号
private static final int port = 1001;
public static void main(String[] args) throws IOException {
//1.启动客户端,连接服务器端
Socket socket = new Socket(ip, port);
System.out.println("客户端已启动!");
//2.创建收发消息对象
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())
);
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
Scanner scanner = new Scanner(System.in);
) {
while (true) {
System.out.println("English:");
//3.发送消息
String msg = scanner.nextLine();
writer.write(msg + "\n");//不能省略\n
writer.flush();// 将发送缓冲区的消息立即发送
//4.接收服务器返回的消息
String serMsg = reader.readLine();
if (serMsg != null && !serMsg.equals("")) {
System.out.println("翻译结果为:" + serMsg);
}
}
}
}
}
注意:先启动服务器端再启动客户端
最终呈现:
扩展:
"智能"翻译机器人->智能翻译机器人:
可以通过爬虫将所有的中英文对照信息添加到数据库中(JDBC),然后通过 TCP 服务器端实现翻译和展示!!👌
总结
虽然"智能"聊天机器人和"智能"翻译机器人的智能是带引号的,但是UDP和TCP网络编程代码你学废了吗!~