我已经实现了一个带有服务器和单个客户端的套接字.它当前的结构方式,只要客户端关闭,服务器就会关闭.我的意图是让服务器运行直到手动关闭.
这是服务器:
public static void main(String args []){;
try
{
ServerSocket socket= new ServerSocket(17);
System.out.println("connect...");
Socket s = socket.accept();
System.out.println("Client Connected.");
while (true)
{
work with server
}
}
catch (IOException e)
{
e.getStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
}
我已尝试用另一个while(true)循环包围整个try/catch 循环,但它什么都不做,同样的问题仍然存在.有关如何保持服务器运行的任何想法?
看起来你的代码会发生什么,你连接到客户端,无限循环与客户端的交互,然后当有人破坏连接(关闭清除,或中断它 - 例如,拔掉网络电缆)你'得到一个IOException,发送给你的catch子句运行然后继续(我猜之后"是你的main()的结束?)...
所以你需要做的是,从那时起,循环回到accept()调用,这样你就可以接受另一个新的客户端连接.例如,这里有一些伪代码:
create server socket
while (1) {
try {
accept client connection
set up your I/O streams
while (1) {
interact with client until connection closes
}
} catch (...) {
handle errors
}
} // loop back to the accept call here
Run Code Online (Sandbox Code Playgroud)
另外,注意在这种情况下,try-catch块怎么坐落这样的错误会被捕捉和处理中的接受环.这样,单个客户端连接上的错误将发送回accept()而不是终止服务器.