解释一下这段代码public class Server { public static void main(String[] args) throws IOException { System.out.println("服务端启动 , 等待连接 .... "); //与客户端建立连接 ServerSocket serverSocket = new ServerSocket(8888); //正在的等待连接 Socket accept = serverSocket.accept(); //连接成功,则读取数据 BufferedReader bdf1 = new BufferedReader(new InputStreamReader(accept.getInputStream())); new Thread(() -> { try { String len = null; //读取数据,每次读取一行 while ((len = bdf1.readLine()) != null) { System.out.println("Client to Server :" + len); } } catch (IOException e) { e.printStackTrace(); } }).start(); Scanner scanner = new Scanner(System.in); OutputStream out = accept.getOutputStream(); //向客户端发送数据,如果等于拜拜,则退出 while (true) { String content = scanner.next(); out.write((content + "\r\n").getBytes()); if ("886".equals(content)) { System.exit(0); } } } }
时间: 2024-01-01 20:03:47 浏览: 83
这段代码是一个基于 Socket 编写的简单的服务端程序,主要功能是与客户端建立连接,并能够接收客户端发送过来的消息并打印出来,同时也能够向客户端发送消息。下面是代码的具体解释:
1. 创建 ServerSocket 对象,指定端口号为 8888:
```
ServerSocket serverSocket = new ServerSocket(8888);
```
2. 等待客户端连接,当有客户端连接时,accept() 方法返回一个 Socket 对象,表示客户端与服务端的连接已经建立成功。
```
Socket accept = serverSocket.accept();
```
3. 通过 BufferedReader 对象读取客户端发送过来的消息,并打印出来。
```
BufferedReader bdf1 = new BufferedReader(new InputStreamReader(accept.getInputStream()));
while ((len = bdf1.readLine()) != null) {
System.out.println("Client to Server :" + len);
}
```
4. 创建一个新的线程,用于接收客户端发送过来的消息,这样可以保证服务端能够同时处理多个客户端的请求。
```
new Thread(() -> {
try {
String len = null;
while ((len = bdf1.readLine()) != null) {
System.out.println("Client to Server :" + len);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
```
5. 创建 Scanner 对象,用于从控制台读取服务端需要发送给客户端的消息,并通过 OutputStream 对象将消息发送给客户端。
```
Scanner scanner = new Scanner(System.in);
OutputStream out = accept.getOutputStream();
while (true) {
String content = scanner.next();
out.write((content + "\r\n").getBytes());
if ("886".equals(content)) {
System.exit(0);
}
}
```
6. 当服务端发送的消息为 "886" 时,程序退出。
阅读全文