hmm, ich gebe mal den ganzen code ein, vielleicht bringt es einen weiter
klasse client:
import java.net.*;
import java.io.*;
import java.lang.*;
public class UDPClient {
public static void main( String args[]){
// args[0]: Funktionsnummer
// args[1]: Name des Servers
if (args.length ");
System.exit(-1);
}
try {
System.out.println(" Nachricht: " + args[0]);
DatagramSocket aSocket = new DatagramSocket();
byte [] m = args[0].getBytes();
String s="";
String a="";
String b="";
Message message = new Message("","","","");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));//Puffert die daten im zwspeicher
if (m[0]==‚1‘){
try {
System.out.print(„Funktionsparameter eingeben:“);
s = in.readLine(); //stellt bufferedreader zur verfügung
message=new Message(„ein“, s, a, b);
}
catch (IOException e)
{
System.out.println(„Fehler bei der Eingabe einer Zeile“);
System.exit( 1 );
}
}
else{
message=new Message(„aus“, s);
}
ByteArrayOutputStream baos=new ByteArrayOutputStream(); //Bytezugriffe auf ein Array
ObjectOutputStream oos=new ObjectOutputStream(baos);
oos.writeObject(message);
System.out.println(„Schreibe Objekt!!!“);
oos.close();
byte [] ba = baos.toByteArray(); //Inhalt des Array aufrufen - ba: bytepuffer
InetAddress aHost = InetAddress.getByName(args[1]); //ip-adresse übergeben
int serverPort = 6789;
DatagramPacket request = new DatagramPacket (ba, ba.length,
aHost, serverPort);
aSocket.send (request);
byte[] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
aSocket.receive (reply);
String str = new String(reply.getData());
System.out.println(" Antwort : " + str);
aSocket.close();
}catch (SocketException e){ System.out.println(" Socket: " + e.getMessage());
}catch (IOException e){ System.out.println(" IO: " + e.getMessage());}
}
}
//Class Message
class Message implements Serializable{
//Name of called function
public String a="";
public String b="";
public String c="";
public String d="";
Message(String a, String b, String c, String d){
this.a=a;
this.b=b;
this.c=c;
this.d=d;
}
Message(String a, String b){
this.a=a;
this.b=b;
}
}
klasse server:
import java.net.*;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.util.Vector;
public class UDPServer{
public static void main( String args[]){
Server s=new Server();
} // main
} //class UDPServer
class Server{
protected String Name;
protected String Land;
protected String Thema;
Vector tn = new Vector();
Server(){
System.out.println(„Der Server ist gestartet“);
String result="";
try{
DatagramSocket aSocket = new DatagramSocket (6789);
byte[] buffer = new byte[1000];
while(true){
DatagramPacket request = new DatagramPacket (buffer, buffer.length); //übergabe Byte-Puffer, größe
aSocket.receive (request);
//System.out.println(" Request: " + new String(request.getData(), 0, request.getLength()));
ByteArrayInputStream bais=new ByteArrayInputStream(request.getData(),0,request.getLength());
ObjectInputStream ois=new ObjectInputStream(bais);
Message m=(Message)ois.readObject();
System.out.println(„Aufgerufene Funktion:“+m.a);
System.out.println(„Parameter:“+m.b);
if (m.a.equals(„ein“)){
result=this.ein(Name, Land, Thema);
}else{
result=this.aus();
}
DatagramPacket reply = new DatagramPacket (result.getBytes(),
result.getBytes().length, request.getAddress(), request.getPort());
aSocket.send (reply);
}
}catch (SocketException e){ System.out.println(" Socket: " + e.getMessage());
}catch (ClassNotFoundException e){System.out.println(" ClassNotFound: " + e.getMessage());
}catch (IOException e) {System.out.println(" IO: " + e.getMessage());}
}
String ein(String name, String land, String vortrag){
Teilnehmer te;
te = new Teilnehmer();
te.setzedaten(name, land, vortrag);
tn.add(te);
return (te.toString());
}
String aus(){
return (tn.toString());
}
}
zuerst sollte der server über dos konsole gestartet werden.
eingabe bei updclient: java UDPClient 1 localhost
nach kommt die frage nach dateeingabe.
wenn man java UDPClient IRGENDWAS localhost eingibt, müssten alle daten angezeit werden