Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
//import java.io.StringReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
public class Server
{
ServerSocket server;
ArrayList<PrintWriter> list_clientWriter; // Liste user
final int LEVEL_ERROR = 1; // Konstanten f�r Errors
final int LEVEL_NORMAL = 0;
public static void main(String[] args)
{
Server serv = new Server();
if (serv.runServer())
{
serv.listenToClients();
}
// else Do nothing
}
public boolean runServer()
{
try
{
server = new ServerSocket(5555);
appendTextToConsole("Server wurde gestartet!", LEVEL_ERROR); // Der Server wurde gestartet
list_clientWriter = new ArrayList<PrintWriter>(); // user werden in einer Liste gespeichert
return true;
}
catch (IOException e)
{
appendTextToConsole("Server konnte nicht gestartet werden!", LEVEL_ERROR); // damit Server nicht gestartet wird
e.printStackTrace();
return false;
}
}
public void appendTextToConsole(String nachricht, int level)
{
if(level == LEVEL_ERROR)
{
System.err.println(nachricht+ "\n"); // wenn Error wird rot ausgegeben
}
else
{
System.out.println(nachricht + "\n"); // wenn normal, normale ausgabe
}
}
public class ClientHandler implements Runnable
{
Socket client;
BufferedReader reader;
public ClientHandler(Socket client)
{
try
{
this.client = client; // client wird �bergeben
reader = new BufferedReader(new InputStreamReader(client.getInputStream())); // BufferedReader(char) /InputStreamReader(bytes) //alles was client schreibt landet im reader
}
catch (IOException e)
{
e.printStackTrace();
}
}
@Override
public void run()
{
// alles auflisten das gesendet wird an alle Clients
String nachricht;
int [][] textÜbertrag; //= new int [] [] {} {};
try
{
while((nachricht = reader.readLine()) != null )
{
while((textÜbertrag = reader.read()) != null)
{
/*
for (int j=0; j<textÜbertrag.length; j++)
for (int i=0; i<textÜbertrag[0].length; i++)
{
textübertrag = [i][j];
}
*/
appendTextToConsole("Vom Client: \n" + textÜbertrag, LEVEL_NORMAL); // anzeige Server
}
appendTextToConsole("Vom Client: \n" + nachricht, LEVEL_NORMAL); // anzeige Server
sendToAllClients(nachricht,textÜbertrag); // Verteiler an alle clients
}
}
catch (IOException e)
{
e.printStackTrace();
}
/*
try
{
while((textÜbertrag = reader.hasNext()) != null)
{
appendTextToConsole("Vom Client: \n" + textÜbertrag, LEVEL_NORMAL); // anzeige Server
}
appendTextToConsole("Vom Client: \n" + nachricht, LEVEL_NORMAL); // anzeige Server
sendToAllClients(nachricht,textÜbertrag);
}
catch (IOException e)
{
e.printStackTrace();
}*/
}
}
public void listenToClients() // Metode laeuft endlos
{
while(true)
{
try
{
Socket client = server.accept(); // neues Socket wird erzeugt und wartet
PrintWriter writer = new PrintWriter(client.getOutputStream()); // Objekt dass der Client sendet wird geholt
list_clientWriter.add(writer);
Thread clientThread = new Thread(new ClientHandler(client)); // fuer jeden aufgenommenen Client wird ein eigener Thread gestartet
clientThread.start(); // jeder Client laeuft einzeln in Threads damit alles parallel laeuft
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void sendToAllClients(String nachricht, int[] [] textÜbertrag)
{
Iterator<PrintWriter> it = list_clientWriter.iterator(); // Iterator erzeugen und von liste holen // zeiger
while(it.hasNext()) // solange wie der operator ein naechsten hat
{
PrintWriter writer = (PrintWriter) it.next(); // erzeugen neuen print writer // type cast
writer.println(nachricht); // nachricht an den client senden
writer.flush();
writer.println(textÜbertrag);
writer.flush(); // nachricht senden //puffer leeren // client der als erstest in der liste ist, bekommt zuerst die nachricht
}
}
}
//---------------Ende----------------------------------------------------------------------------------------------------------