У меня есть проблемы с сокетами в Java. У меня есть a ServerSocket
это слушает с, принимают () и потоки икры для каждого клиентского запроса. Коммуникация между клиентами и сервером хорошо работает. Я использую inputstream для чтения данных от клиентов в serverthreads, как:
inputStream = mySocket.getInputStream();
bytes = inputStream.read(buffer);
Моя проблема состоит в том, что, если я называю socket.close () от клиентов, ничего не происходит с блокирующимся вызовом bytes = inputStream.read(buffer);
, это продолжает блокироваться. Но это работает, если я закрываю сокет с сервера, затем inputStream.read(buffer);
из клиента возвращается "-1".
СЕРВЕР-MAINTHREAD:
//SERVER MAIN THREAD, SPAWNS CLIENT THREADS
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
while (listening){
new ServerThread(serverSocket.accept(), monitor).start();
}
СЕРВЕР-CLIENTTHREADS:
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