В моем основном потоке у меня есть цикл while (listen), который вызывает accept() на моем объекте ServerSocket, затем запускает новый клиентский поток и добавляет его в коллекцию, когда новый клиент принят. Однако вызов accept() в циклах while (прослушивания) и я пытаюсь закрыть соединение. пожалуйста, найдите мой примерный пример кода, есть ли способ создать службу-обертку, чтобы закрыть соединение сокета для следующей серверной программы.Многопоточная розетка - Невозможно закрыть розетку
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