package tcp2;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
// 一个连接中有多个请求
// 长连接 + 根据 \r\n 来分割请求和响应
public class Server {
public static void main(String[] args) throws IOException {
try (ServerSocket serverSocket = new ServerSocket(8192)) {
while (true) {
try (Socket socket = serverSocket.accept()) { // 等待有客户端连接上来
// 那个客户端先连接上来,就处理哪个客户端的事情
// 服务器在专心处理 客户端1 的事情
System.out.println(" ——————————");
System.out.println(“有一个客户端连接上来了”);
InputStream is = socket.getInputStream();
InputStreamReader isReader = new InputStreamReader(is, “UTF-8”);
Scanner scanner = new Scanner(isReader);
// 没有 scanner,需要手动找 \r\n,麻烦的很
OutputStream os = socket.getOutputStream();
OutputStreamWriter osWriter = new OutputStreamWriter(os, “UTF-8”);
PrintWriter printWriter = new PrintWriter(osWriter);
// 一个连接可以发送多个请求
// 服务器在这个循环中专心处理客户端1的事情
// 不知道客户端2已经连接上来了
// 直到客户端1关闭连接了(hasNextLine() 返回 false)
// 服务器才能重新处理下一个客户端连接
while (scanner.hasNextLine()) {
String request = scanner.nextLine(); // 客户端1 没有发送数据,这个方法就不会返回
System.out.println("++++++++++++++++++");
System.out.println(request);
// 处理请求 -> 响应
String response = request;
// 发送响应,也需要带着 \r\n
printWriter.println(response);
printWriter.flush(); // 千万不要忘掉
System.out.println("++++++++++++++++++");
}
System.out.println("——————————");
}
}
}
}
}
package tcp2;
import java.io.*;
import java.net.Socket;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
Scanner stdinScanner = new Scanner(System.in);
try (Socket socket = new Socket(“127.0.0.1”, 8192)) {
OutputStream os = socket.getOutputStream();
OutputStreamWriter osWriter = new OutputStreamWriter(os, “UTF-8”);
PrintWriter printWriter = new PrintWriter(osWriter);
InputStream is = socket.getInputStream();
InputStreamReader isReader = new InputStreamReader(is, “UTF-8”);
Scanner scanner = new Scanner(isReader);
//List requestList = Arrays.asList(“今天吃了么”, “今天好冷啊”, “今天好热啊”, “回家吃去吧”);
//for (String request : requestList) {
System.out.print("请输入请求> ");
while (stdinScanner.hasNextLine()) {
String request = stdinScanner.nextLine();
printWriter.println(request);
System.out.println(“客户端请求 ->: " + request);
printWriter.flush();
String response = scanner.nextLine();
System.out.println(”<- 服务器应答: " + response);
System.out.print("请输入请求> ");
}
}
}
}