一旦客户端断开连接并重新启动客户端,服务器就会给出读取行超时。当我再次运行服务器时,它运行正常。因此,一次断开连接后,我会读取行超时异常,而下一次它将正常工作。
import java.io.*;
public class TcpServer {
ServerSocket welcomeSocket;
public TcpServer() throws IOException{
createSocket(port);
}
public TcpServer(int port) throws IOException{
createSocket(port);
}
private void createSocket(int port) throws IOException{
welcomeSocket = new ServerSocket(port);
}
@Override
public void listen() throws IOException{
boolean exitServer = false;
Socket connectionSocket = null;
try {
while (!exitServer ) {
if(...){
exitServer = true;
}
}
}
} catch (IOException e) {
try {
welcomeSocket.accept();
listen();
} catch (IOException e1) {
System.out.println("Cannot open connection!!!");
}
}
}
}
当有人尝试连接时,ServerSocket.accept()方法将阻止并返回新的客户端套接字连接。将其放入while循环中,然后为这个新的套接字工作程序生成一个线程。类似于以下内容:
ServerSocket welcomeSocket = new ServerSocket(port);
while (true) {
Socket socket = welcomeSocket.accept();
new Thread(new RunnableSocketWorker(socket));
}
如果您的客户确实决定断开连接,那可以了。您希望正在使用它的套接字工作程序退出。如果新客户端尝试连接,则它们将使用ServerSocket对象和此无限循环进行连接。
套接字在Java中相对容易的一个重要原因是此ServerSocket类处理所有传入的新客户端。您为什么要自己编写该部分代码?
只需拿回它的插座即可,玩得开心!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句