Hallo!
Ich arbeite zur Zeit an einer kleinen Server-Client Anwendung. Der Server ist hierbei in der Lage auf verschiedene Kommandos, welche in String firm übermittelt wrden zu reagieren.
Es tritt hierbei jedoch ein Problem auf welches ich absolut nicht nachvollziehen kann.
Im Clienten laufen zwei Threads welche unabhängig voneinander in einer 3ten Klasse die Methode
aufrufen.
Wenn nun die 2 Threads diese Methode schnell hintereinander aufrufen empängt der Server die Kommandos nicht einzelnd sondern als einen zusammenhängenden String.
Der Server arbeitet so:
Da alle IO Klassen, korigiert mich wenn ich falsch liege, synchronisiert sind kann ich mir diesen Fehler nicht erklären.
Bsp.:
Es wird gesendet: "COMM IMG"
direkt danach: "COMM MOUSEMOVE 52 57"
der Server empfängt: "COMM IMGCOMM MOUSEMOVE 52 57"
worauf er natürlich eine Fehlermeldung bringt.
Vielen Dank im Vorraus.
MFG
Ich arbeite zur Zeit an einer kleinen Server-Client Anwendung. Der Server ist hierbei in der Lage auf verschiedene Kommandos, welche in String firm übermittelt wrden zu reagieren.
Es tritt hierbei jedoch ein Problem auf welches ich absolut nicht nachvollziehen kann.
Im Clienten laufen zwei Threads welche unabhängig voneinander in einer 3ten Klasse die Methode
Code:
public synchronized void Send(String com)
{
System.out.println("Sende : "+ com);
try
{
this.out.write(com.getBytes());
this.out.flush();
}catch(Exception x)
{
System.out.println("Senden fehlgeschlagen!");
}
System.out.println("habe gesendet: "+com);
}
aufrufen.
Wenn nun die 2 Threads diese Methode schnell hintereinander aufrufen empängt der Server die Kommandos nicht einzelnd sondern als einen zusammenhängenden String.
Der Server arbeitet so:
Code:
public synchronized void run()
{
String second="";
String third="";
String vier = "";
while(true)
{
byte[] input = new byte[1000];
second="";
third="";
vier = "";
try
{
this.in.read(input);
}
catch(Exception y)
{
}
String inputs = this.bearbeitearray(input);
input=null;
System.out.println("Input: "+inputs);
tok = new StringTokenizer(inputs);
String first = tok.nextToken();
if(tok.hasMoreTokens()){
second = tok.nextToken();
System.out.println("Second: "+ second);
}
if(tok.hasMoreTokens()){
third = tok.nextToken();
System.out.println("third: "+ third);
}
if(tok.hasMoreTokens()){
vier = tok.nextToken();
System.out.println("Vier: "+ vier);
}
tok=null;
Da alle IO Klassen, korigiert mich wenn ich falsch liege, synchronisiert sind kann ich mir diesen Fehler nicht erklären.
Bsp.:
Es wird gesendet: "COMM IMG"
direkt danach: "COMM MOUSEMOVE 52 57"
der Server empfängt: "COMM IMGCOMM MOUSEMOVE 52 57"
worauf er natürlich eine Fehlermeldung bringt.
Vielen Dank im Vorraus.
MFG