我最近在 java 中编写了一个套接字通信程序,其中两个线程在每个服务器和客户端并发运行,处理对套接字的读写操作,允许双方连续发送和接收消息。问题是客户端或服务器停止接收来自另一端的通信,然后一段时间后它们都停止工作。我不知道出了什么问题以及连接如何断开:/服务器代码 import java.net.*; import java.io.*; import java.util.Scanner; public class Server { private Socket socket = null; private ServerSocket server = null; private DataInputStream in = null; private DataOutputStream out = null;private Scanner inp = null;String line = "";String iline = ""; public Server(int port) { try { server = new ServerSocket(port); System.out.println("Server started"); System.out.println("Waiting for a client ..."); socket = server.accept(); System.out.println("Client accepted"); // takes input from the client socket out=new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); inp = new Scanner(System.in); while (true) { new Thread(new Runnable(){ public void run() { try{ while(true){ line = in.readUTF(); System.out.println("Client : "+line); if(socket.isClosed()||socket.isOutputShutdown()||socket.isInputShutdown()) { System.out.println("DED"); System.exit(0); } } } catch(Exception e){ System.out.println("Exception !!!"); } } })
1 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
只是初步运行您的代码,我看到的是第一个 while(true){} ,您正在生成一个调用其上的 start 方法的线程。在您启动读取线程的那一刻,主线程检查套接字条件并继续前进。由于在您的第一个 while(true) 中有一个 true ,一个新线程再次产生,并且一直持续到套接字关闭,程序因 system.exit 调用而终止。
添加回答
举报
0/150
提交
取消