import java.net.ServerSocket; import java.net.Socket; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.PrintWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; class InputThread extends Thread { BufferedReader in; public InputThread() { in = new BufferedReader(new InputStreamReader(System.in)); start(); } public void run() { try { while (true) { String inline = in.readLine(); if (inline == null || inline.equals("quit")) break; System.out.println("Du sa '" + inline + "'"); ClientConnection.sendToAllClients(inline); } } catch(IOException e) { System.out.println("InputThread: " + e); } } // run } // class InputThread class ClientConnection { private static ArrayList allClients = new ArrayList(); private final Socket socket; private final PrintWriter out; public ClientConnection(Socket s) throws IOException { socket = s; out = new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())), true); System.out.println("En klienttråd har skapats."); allClients.add(this); } public static void sendToAllClients(String line) { Iterator i = allClients.iterator(); while (i.hasNext()) { ClientConnection t = (ClientConnection)i.next(); t.out.println(line); } } } // class ClientThread public class Temperaturserver { public static final int PORT = 3003; public static void main(String[] args) throws IOException { ServerSocket s = new ServerSocket(PORT); System.out.println("Server-socketen: " + s); System.out.println("Servern lyssnar..."); InputThread it = new InputThread(); try { while(true) { // Blocks until a connection occurs: Socket socket = s.accept(); System.out.println("Uppkoppling accepterad."); System.out.println("Den nya socketen: " + socket); try { ClientConnection cc = new ClientConnection(socket); System.out.println("Ny klientkoppling skapad."); System.out.println("Den nya klientkopplingen: " + cc); } catch(IOException e) { // If the constructor fails, close the socket, // otherwise the thread will close it: socket.close(); } } } finally { s.close(); } } // main } // Temperaturserver