我在 java 中遇到套接字问题。我有一个 ServerSocket
正在监听 accept() 并为每个客户端请求生成线程。客户端和服务器之间的通信工作正常。我正在使用输入流从服务器线程中的客户端读取数据,例如:
inputStream = mySocket.getInputStream();
bytes = inputStream.read(buffer);
我的问题是,如果我从客户端调用 socket.close(),bytes = inputStream.read(buffer);
的阻塞调用没有任何反应,它会继续阻塞。但是,如果我关闭来自服务器的套接字,它会起作用,然后客户端的 inputStream.read(buffer);
返回“-1”。
服务器维护线程:
//SERVER MAIN THREAD, SPAWNS CLIENT THREADS
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
while (listening){
new ServerThread(serverSocket.accept(), monitor).start();
}
服务器-客户端线程:
public class ServerThread extends Thread{
public ServerThread(Socket socket, Monitor monitor) {
this.socket = socket;
this.monitor = monitor;
}
public void run(){
byte[] buffer = new byte[1024];
int bytes;
//Listen
while(true){
try {
InputStream inputStream = socket.getInputStream();
monitor.doStuffWithOtherThreads(Object myObject);
bytes = inputStream.read(buffer); //Problem
if (bytes == -1){
System.out.println("breaks");
break;
}
byte[] readBuf = (byte[]) buffer;
String readMessage = new String(readBuf, 0, bytes);
System.out.println(readMessage);
System.out.println(bytes);
} catch (IOException e) {
System.out.println("Connection closed");
break;
}
}
}
客户:
InetAddress serverAddr = InetAddress.getByName("serverhostname");
socket = new Socket(serverAddr, PORT);
socket.close(); //Close the socket connection from client. Nothing happens in the serverthread
最佳答案
您发布的服务器代码不检查 -1。因此,这要么是问题所在,要么不是真正的代码,在这种情况下,您应该发布真正的代码以供评论。
编辑您发布的代码与您描述的不一样。
关于java - 在客户端 JAVA 中调用 socket.close() 时套接字不关闭服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3303628/