Java-Einsatz im Netzwerk
Beispiel: Chat-Client
import java.net.*;
import java.io.*;
public class DatagrammClient {
static final String ANMELDUNG = "ANMELDUNG";
static final String ENDE = "ENDE";
static int port = 1234;
static int length = 256; // Länge eines Pakets
public static void main( String args[]) {
String servername = "localhost";
String text = null;
DatagramPacket packet;
byte[] ba = ANMELDUNG.getBytes();
// Namen des Servers von Kommandozeile übernehmen
if( args.length > 0 ) servername = args[0];
try {
DatagramSocket socket = new DatagramSocket();
InetAddress ia = InetAddress.getByName( servername );
packet = new DatagramPacket( ba, ba.length, ia, port);
// sende Anmeldung
socket.send( packet );
// Lesen der empfangenen Pakete erfolgt in eigenem Thread
LeseThread lt = new LeseThread( socket );
// Eingaben von Tastatur an Server schicken
BufferedReader br = new BufferedReader(new InputStreamReader( System.in ) );
do {
text = br.readLine();
ba = text.getBytes();
packet.setData( ba, 0, ba.length );
socket.send( packet );
} while( ! text.equals("ENDE") );
// alles beenden
System.exit(0);
}
catch( IOException e ) {
System.err.println("Ausnahmefehler: " + e );
}
}
}
Dazu gehört die Klasse LeseThread zum Empfang von Nachrichten.
class LeseThread implements Runnable {
static int length = 256;
DatagramSocket socket;
LeseThread(DatagramSocket socket ) {
this.socket = socket;
Thread t = new Thread(this,"Lesen");
t.start();
}
public void run() {
DatagramPacket packet =
new DatagramPacket( new byte[length], length);
while( true ) {
try {
socket.receive( packet );
InetSocketAddress add = (InetSocketAddress)packet.getSocketAddress();
String text = new String(packet.getData(), 0, packet.getLength());
System.out.println( add +">" + text);
//System.out.println( ">" + text);
}
catch( IOException e ) {
System.err.println("Ausnahmefehler: " + e );
}
}
}
}