一、TCP协议实现网络通信
服务器端:public class TCPServer {
//端口号
private static final int port = 9002;
public static void main(String[] args) throws IOException {
//1.创建TCP服务器端
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器启动成功!");
//2.等待客户端的连接.连接起来就可以进行交互
Socket client = serverSocket.accept();//会返回socket对象
//连接起来就可以进行交互
System.out.println(String.format("有客户端连接了,客户端IP:%s 端口:%d",
client.getInetAddress().getHostAddress(),client.getPort()));
//try-resource:JVM可以自动关闭资源
try( BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(client.getInputStream())
);
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())
)
){
while (true){//可能有多个消息
//3.接收客户端的信息
String msg = bufferedReader.readLine();
if (msg != null && !msg.equals("")) {
System.out.println("收到客户端信息:" + msg);
}
//4.返回给客户端的响应信息
String serMsg = "我收到了!";
bufferedWriter.write(serMsg+"\n");//!!!!!!!!!!!!!!!!!!!!!!+\n
//刷新缓冲区
bufferedWriter.flush();
}
}
}
}
客户端:
public class TCPClient {
//服务器端的IP
private static final String ip = "127.0.0.1";
//服务器端口号
private static final int port = 9002;
public static void main(String[] args) throws IOException {
//1.创建TCP客户端--》同时连接到服务器端
Socket socket = new Socket(ip,port);
try(BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
Scanner scanner = new Scanner(System.in);
){
while (true){//不停的进行信息写入
System.out.print("->");
String msg = scanner.nextLine();
//2.发送信息
bufferedWriter.write(msg+"\n");
bufferedWriter.flush();
//3.接收服务端返回的信息
String serMsg = bufferedReader.readLine();
System.out.println("服务器端反馈:"+serMsg);
//刷新缓冲区
bufferedWriter.flush();
}
}
}
}
二、基于TCP实现英译汉程序
服务器端:public class TCPServerByCN {
private static final int port = 9003;
//定义翻译字典
static HashMap<String,String> dirMap = new HashMap<>();
//在项目运行之后
static {
dirMap.put("hello","你好");
dirMap.put("cat","猫");
dirMap.put("dog","狗");
}
public static void main(String[] args) throws IOException {
//1.创建TCP服务器
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("英译汉服务器已启动~");
//2.等待客户端连接
Socket client = serverSocket.accept();
System.out.println(String.format("有客户端连接了,客户端IP:%s 端口:%d",
client.getInetAddress().getHostAddress(),client.getPort()));
try(
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(client.getInputStream()));
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(client.getOutputStream()))
) {
while (true){//循环接收
//3.得到客户端的英文单词
String en = bufferedReader.readLine();
if(en!=null && !en.equals("")){
//4.英译汉的结果处理方法
String cn = processData2(en);
//5.将结果返回给客户端
bufferedWriter.write(cn+"\n");
//刷新
bufferedWriter.flush();
}
}
}
}
/**【方式1】
* 穷举法---实现英译汉
* @param en
* @return
*/
private static String processData(String en) {
String cn ="未知";
switch (en){
case "hello":
cn = "你好";
break;
case "cat":
cn = "猫";
break;
case "dog":
cn = "狗";
break;
default:
break;
}
return cn;
}
/**【方式1】
* HashMap---实现英译汉
* @param en
* @return
*/
private static String processData2(String en){
//todo:扩展英译汉项目2021.4.14:数据库➕爬虫
String cn ="未知";
cn=dirMap.get(en);
return cn;
}
}
客户端代码略。