package server;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class EchoServer {
public static void main(String[] args) throws IOException {
//1.
ServerSocket serverSocket = new ServerSocket(8189);
//2.阻塞,等待客户端连接
System.out.println("等待客户端连接。。。");
Socket socket = serverSocket.accept();
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("客户端:"+localHost+"已连接");
//3.inputStream用于读取客户端的消息(请求),outputStream用于向客户端输出消息(响应)
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
//4.读取输入流,将输入流转换成键盘输入
Scanner scanner = new Scanner(inputStream, String.valueOf(StandardCharsets.UTF_8));
//5.将输出流转换成打印流,在控制台输出
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
PrintWriter printWriter = new PrintWriter(outputStreamWriter, true/*自动刷新*/);
//6.向客户端发送消息,会输出到客户端终端设备上
printWriter.println("Hello, Enter BYE to exit.");
//7.scanner用于读取客户端的键盘输入,printWriter将scanner读取到的输入输出回显到客户端终端设备上
boolean done = false;
while(!done && scanner.hasNextLine()){
String line = scanner.nextLine();
printWriter.println("Echo: "+line);
if("BYE".equals(line.trim())){
done = true;
System.out.println(localHost+"已退出");
}
}
}
}
运行EchoSever服务端,
在cmd终端输入telnet localhost 8981并回车,
就可以输入消息,并自动回显,输入BYE退出连接
注:scanner用于读取客户端的键盘输入,printWriter将scanner读取到的输入输出回显到客户端终端设备上