Java中修改TCP通信代码实现BufferedReader读取至stopp终止的问题
TCP客户端与服务器持续通信直到输入"stopp"终止
修改后的客户端代码
import java.io.*; import java.net.*; public class Klient { public static void main(String[] args) throws UnknownHostException, IOException { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("127.0.0.1", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); while (true) { sentence = inFromUser.readLine(); // 处理输入为空或终止指令 if (sentence == null || "stopp".equalsIgnoreCase(sentence)) { outToServer.writeBytes("stopp\n"); clientSocket.close(); break; } outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println(modifiedSentence); } } }
客户端修改点
- 添加终止条件:当输入
stopp(不区分大小写)或输入流结束(sentence为null)时,发送终止指令给服务器,关闭Socket并退出循环。 - 确保资源正常释放,避免连接泄漏。
修改后的服务器代码
import java.io.*; import java.net.*; public class TCPServer { public static void main(String[] args) throws IOException { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); while (true) { clientSentence = inFromClient.readLine(); // 判断是否收到终止指令或客户端断开 if (clientSentence == null || "stopp".equalsIgnoreCase(clientSentence)) { connectionSocket.close(); welcomeSocket.close(); break; } capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } }
服务器修改点
- 移除原外层无限循环,改为接受单个客户端连接后进入消息处理循环(若需支持多客户端,可将连接处理逻辑放入线程)。
- 添加终止判断:收到
stopp指令或客户端断开时,关闭连接和ServerSocket,终止服务器程序。 - 持续读取客户端发送的消息,直到触发终止条件。
内容的提问来源于stack exchange,提问作者brah79
相关产品推荐
相关产品推荐

