Exception вылетал так как ты пытался закрыть ServerSocket, который просто объявил и, даже не передавал. SocketServer закрывается только один раз. Соединение с клиентом закрывается закрытием связанного с ним Socket, ну и потоков вначале. Примерно так: ввод сообщений с консоли клиент: | Код | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket;
public class TestClient {
private static BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
public static String readString() { String readed = null;
try { readed = consoleReader.readLine(); } catch (IOException ex) { ex.printStackTrace(); } return readed; }
public static void main(String args[]) throws IOException { InetAddress ob = InetAddress.getLocalHost();
Socket socket = null; PrintWriter writer = null; BufferedReader reader = null; try { socket = new Socket(ob, 9008); writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true); reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) { String line = readString(); writer.println(line); writer.flush(); System.out.printf("Recive from %s: %s\n", ob.getHostAddress(), reader.readLine()); } } catch (IOException e) { System.err.println("error " + e); } finally { try { reader.close(); writer.close(); socket.close(); } catch (IOException e2) { } } }
}
|
сервер: | Код | import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket;
class ClientRunnable implements Runnable {
BufferedReader reader = null; PrintWriter writer = null; Socket incoming = null; int connectId;
ClientRunnable(Socket i, int c) { incoming = i; connectId = c; }
@Override public void run() { try { reader = new BufferedReader(new InputStreamReader(incoming.getInputStream())); writer = new PrintWriter(new OutputStreamWriter(incoming.getOutputStream()), true); String line; while ((line = reader.readLine()) != null) { System.out.printf("Message from %d: %s\n", connectId, line); if (line.equals("pk")) { System.out.println("stop!"); break; } writer.println(line); } } catch (Exception e) { e.printStackTrace(); } finally { try { reader.close(); writer.close(); incoming.close(); } catch (Exception e) { e.printStackTrace(); } } } }
public class TestServer {
public static void main(String args[]) { try { Socket incoming = null; int connectId = 0; ServerSocket server = new ServerSocket(9008); InetAddress ob = InetAddress.getLocalHost(); System.out.println("Started, IP: " + ob.getHostAddress()); while (true) { incoming = server.accept(); String name = ob.getHostName(); System.out.println("Incoming: " + connectId + " " + incoming.getLocalSocketAddress()); Runnable r = new ClientRunnable(incoming, connectId); Thread t = new Thread(r); t.start(); connectId++; } } catch (Exception e) { e.printStackTrace(); }
}
}
|
|