import java.net.ServerSocket; import java.net.Socket; import java.io.InputStream; import java.io.OutputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.InetAddress; import java.util.ArrayList; class ServerThread implements Runnable { private ServerSocket server1; public ServerThread(ServerSocket ss) { server1 = ss; System.out.println("Server ctor"); } public void run() { try { // server1 = new ServerSocket(8090); Socket socket = server1.accept(); Thread.sleep(2000); // wait for clients to block on socket read OutputStream os = socket.getOutputStream(); os.write("Test string\n".getBytes()); os.flush(); // os.close(); // socket.close(); } catch (Exception exc) { System.out.println(exc); System.exit(1); } } } class ClientThread implements Runnable { private Socket client1; public ClientThread(Socket s) { client1 = s; System.out.println("Client ctor"); } public void run() { try { InputStream is = client1.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); for(;;) { String str = br.readLine(); if(str == null || str.trim().length() == 0) break; System.out.println(Thread.currentThread().getId() + "\t" + str); } } catch (Exception exc) { System.out.println(Thread.currentThread().getId() + "\t" + exc); //System.exit(1); } System.out.println(Thread.currentThread().getId() + "\texiting"); } } public class JavaApplication1 { public static void main(String[] args) { ServerSocket server1 = null; try { server1 = new ServerSocket(8090); } catch (Exception exc) { System.out.println(exc); System.exit(1); } Thread server = new Thread(new ServerThread(server1)); server.start(); Socket cs = null; try { cs = new Socket(InetAddress.getLocalHost(), 8090); cs.setSoTimeout(4000); } catch (Exception exc) { System.out.println(exc); System.exit(1); } ArrayList clients = new ArrayList(); for(int i = 0; i < 15; i++) { try { cs = new Socket(InetAddress.getLocalHost(), 8090); cs.setSoTimeout(4000); } catch (Exception exc) { System.out.println(exc); System.exit(1); } clients.add(new Thread(new ClientThread(cs))); } for(Thread client: clients) client.start(); try { for(Thread client: clients) client.join(); } catch (Exception exc) { } } }