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
/* 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