1) Потоки (Streams) надо закрывать методом close(); после использования. Если поток буферизованный, будет полезно также вызвать flush(); для слива содержимого буфера вызовом native API.
2) Взаимодействие сервера с несколькими клиентами, как правило, реализуется созданием отдельного потока для работы с каждым из клиентов, например:
| Код | public class KKMultiServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; boolean listening = true;
try { serverSocket = new ServerSocket(4444); } catch (IOException e) { System.err.println("Could not listen on port: 4444."); System.exit(-1); }
while (listening) new KKMultiServerThread(serverSocket.accept()).start();
serverSocket.close(); } }
|
| Код | public class KKMultiServerThread extends Thread { private Socket socket = null;
public KKMultiServerThread(Socket socket) { super("KKMultiServerThread"); this.socket = socket; }
public void run() {
try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream()));
// здесь обрабатываете input, результат пишете в output out.close(); in.close(); socket.close();
} catch (IOException e) { e.printStackTrace(); } } }
|
|