在我的主线程我有一段时间(听)循环它调用accept()方法我ServerSocket对象上,然后开始一个新的客户端线程,并将其添加到集合时,新客户被接受。 但是,while(listen)循环中的accept()调用会阻塞,我正在努力关闭连接。请找到我的下面的示例代码,有没有什么办法来创建封装服务来关闭下面的服务器端程序的套接字连接。多线程插座 - 无法关闭套接字正常
public static final void serverSocket(IData pipeline) throws ServiceException {
int clientNumber = 0;
ServerSocket listener = null;
int port =0;
Properties socketProperties = new Properties();
try
{
listener = new ServerSocket(port);
System.out.println(listener.getLocalSocketAddress());
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
while(true){
new Connections(listener.accept(), clientNumber++).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
}
finally{
try {
listener.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static class Connections extends Thread {
private Socket socket;
private int clientNumber;
public Connections(Socket socket, int clientNumber) {
this.socket = socket;
this.clientNumber = clientNumber;
log("New connection with client# " + clientNumber + " at " + socket);
}
public void run()
{
try {
// Send a welcome message to the client.
while (true)
{
// my program
}
catch (IOException e) {
//exception
}
finally {
try {
socket.close();
}
catch (IOException e) {
log.error("Couldn't close a socket, what's going on?");
}
log("Connection with client# " + clientNumber + " closed");
}
}
任何建议将不胜感激。
当'Connections'对象或者完成什么是应该做的或遇到它使用的插座上EOS或致命'IOException'的连接应该被关闭。例子比比皆是。不清楚问题是什么。 – EJP