套接字异常:套接字已关闭
我想创建能够与多个客户端连接的服务器。 我的主要功能是:
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 {
}
}
}
当我运行客户端并向服务器发送消息时,它已收到,但在下一个 while 循环迭代中 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)
I want to create server which is able to be connected with multiple clients.
My main function is:
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 is a Thread class. The run method:
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 {
}
}
}
When I run client and send message to server it's received but on the next while loop iteration connection.getInputStream(); throws an Socket Exception socket is closed. Why?
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将输入流和缓冲读取器放在循环之外。
可能是创建连接到同一输入流的多个流导致了这种情况。
Put the input stream and buffered reader outside the loop.
Possibly creating multiple stream connected to the same input stream is causing this.
尝试
一下,完成后也不要忘记关闭套接字
try
Also don't forget to close sockets when your done with them