[JAVA] Server Client verbindung

zyclop

Well-known member
ID: 262762
L
4 November 2006
148
4
Hi, ich habe folgende Codes:

/* EchoServer.java */

import java.net.*;
import java.io.*;

public class EchoServer
{
public static void main(String[] args)
{
int cnt = 0;
try {
System.out.println('Warte auf Verbindungen auf Port 7...');
ServerSocket echod = new ServerSocket(7);
while (true) {
Socket socket = echod.accept();
(new EchoClientThread(++cnt, socket)).start();
}
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
}
}

class EchoClientThread

extends Thread
{
private int name;
private Socket socket;
public EchoClientThread(int name, Socket socket)
{
this.name = name;
this.socket = socket;
}

public void run()
{
String msg = 'EchoServer: Verbindung ' + name;
System.out.println(msg + ' hergestellt');
try {
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
out.write((msg + '\r\n').getBytes());
int c;
while ((c = in.read()) != -1) {
out.write((char)c);
System.out.print((char)c);
}
System.out.println('Verbindung ' + name + ' wird beendet');
socket.close();
} catch (IOException e) {
System.err.println(e.toString());
}
}
}


--------------> 2. Datei <-------------------------

/* EchoClient.java */

import java.net.*;
import java.io.*;

public class EchoClient
{
public static void main(String[] args)
{
if (args.length != 1) {
System.err.println('Usage: java EchoClient <host>');
System.exit(1);
}
try {
Socket sock = new Socket(args[0], 7);
InputStream in = sock.getInputStream();
OutputStream out = sock.getOutputStream();
//Timeout setzen
sock.setSoTimeout(300);
//Ausgabethread erzeugen
OutputThread th = new OutputThread(in);
th.start();
//Schleife für Benutzereingaben
BufferedReader conin = new BufferedReader(
new InputStreamReader(System.in));
String line = '';
while (true) {
//Eingabezeile lesen
line = conin.readLine();
if (line.equalsIgnoreCase('QUIT')) {
break;
}
//Eingabezeile an ECHO-Server schicken
out.write(line.getBytes());
out.write('\r');
out.write('\n');
//Ausgabe abwarten
th.yield();
}
//Programm beenden
System.out.println('terminating output thread...');
th.requestStop();
th.yield();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
in.close();
out.close();
sock.close();
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
}
}

class OutputThread

extends Thread
{
InputStream in;
boolean stoprequested;

public OutputThread(InputStream in)
{
super();
this.in = in;
stoprequested = false;
}

public synchronized void requestStop()
{
stoprequested = true;
}

public void run()
{
int len;
byte[] b = new byte[100];
try {
while (!stoprequested) {
try {
if ((len = in.read(b)) == -1) {
break;
}
System.out.write(b, 0, len);
} catch (InterruptedIOException e) {
//nochmal versuchen
}
}
} catch (IOException e) {
System.err.println('OutputThread: ' + e.toString());
}
}
}



Es wird eine Verbindung mit einem Server auf Port 7 hergestellt...
Jeder verbundene Client bekommt eine Nummer. Nun will ich wissen, wie ich die Echo Ausgabe vom Server an alle mit ihm verbundene Clients senden kann... D.H. was muss ich ändern???

Vielen Dank für eure Hilfe!

---zyclop
 
schau mal bei google... da findest du genügend tuts wie man nen echo server baut, bzw schon nen kleinen chat. der echo server den du hier gepostet hast ist sehr primitv... er können zwar mehrere clients connecten, aber der server ansich kann die clients nicht direkt ansprechen. du musst erstmal die clients speichern... zb in nem array.

und sobald nen client connectet läufst du alle clients durch und schickst ihn ne nachricht, das ein neuer client connected hat. dazu muss natürlich die EchoClientThread klasse erweitert werden um eine funktion die das senden übernimmt. zurzeit ist ja alles in der run funktion eingebaut.

PS: schon mal was von code tags gehört? damit kann man quellcode wesentlich besser lesen...
 
Ok ich werd mal schaun... und das mit den Code Tag's tut mir leid :( hatte ich vergessen... war in Eile!

---zyclop