我想創建能夠與多個客戶端連接的服務器。 我的主要功能是:套接字例外:套接字已關閉
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(5556);
} catch (IOException ex) {
Logger.getLogger(MakaoServer.class.getName()).log(Level.SEVERE, null, ex);
}
while (true) {
try {
Socket connection = serverSocket.accept();
PlayerConnection playerConn = new PlayerConnection(connection);
playerConn.start();
} catch (IOException ex) {
System.out.println("Nie można było utworzyć gniazda.");
}
}
PlayerConnection是一個Thread類。 run方法:
public void run() {
InputStream input = null;
while (true) {
try {
input = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String msg = reader.readLine();
System.out.println(msg);
} catch (IOException ex) {
Logger.getLogger(PlayerConnection.class.getName()).log(Level.SEVERE, null, ex);
} finally {
}
}
}
當我運行客戶端和發送消息給它接收的服務器,但是,接下來將在循環迭代connection.getInputStream();拋出一個Socket異常套接字被關閉。爲什麼?
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at makaoserver.PlayerConnection.run(PlayerConnection.java:38)
你讀循環應該結束的時候'的readLine()''返回null'。目前,當對端關閉連接時,您會收到無盡的'null'消息。 – EJP