Java Client - C Server

Status
Nicht offen für weitere Antworten.

IceTi

Bekanntes Mitglied
Hallo,

ich habe da einen Client in Java und einen Server in C.
Der Client sendet dem Server immer Daten über einen Socket.

Manche Daten (immer nur Zahlen) werden vom Server ausgewertet und dann direkt wieder an den Client, welcher ihm die Daten geschickt hat, zurückgesendet z.B. 1, 5 oder 20, 39. Die Zahlen werde also nur durchgeschleift!

Anderen Daten, nähmlich bestimmte Zahlen wie z.B. 200 oder 300 bewirken, dass allen Clients die zum Server verbunden sind entsprechende andere Daten bekommen. Ich schicke dem Server z.B. 200 und dann eine 3. Nun bekommen alle Clients Daten.

Das funktieniert soweit auch alles bis auf das an alle senden. Hier erstmal mein Client:

Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client{

	// Variablen 
	private int port = 4711;	
	private String serverName = "192.168.0.210";
//	private String serverName = "localhost";
	private Socket client;
	private BufferedWriter out;	
	public BufferedReader in;
	
	// Konstruktor
	Client() throws IOException{
		client = new Socket (serverName, port);
		out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
		in = new BufferedReader(new InputStreamReader(client.getInputStream()));
	}
	
	// Sendet Daten an den Server
	public void sendData(String outgoing) throws IOException{
		out.write(outgoing);
		out.newLine();
		out.flush();
	}
}

Und hier die Main Klasse wo ich die Daten vom Serverf abrufe:
Code:
...

		try {
			client = new Client();
		} catch (IOException e3) {		e3.printStackTrace();		}


...

	public void run(){
		while(true){
	    	try {

			incoming = client.in.readLine();
	    	System.out.println("Client empfängt: "+incoming);
	    	
		}
	    	} catch (IOException e) { 	}
		try {
			Thread.sleep(20);
			} catch (InterruptedException e) {	e.printStackTrace();	}
		}

...


Also wenn ich Daten zum Server schicke die dann an alle geschickt werden sollen, bekommt ich diese bei System.out erst angezeigt wenn ich dem Server Daten schicke dir nur mir zugesand werden sollen (bzw. einfach durchgeschliefen werde). Die Daten die ich dann bekomme sehe z.B. so aus:
Unbenannt.JPG


Hoffe das Problem ist klar geworden. Irgendwie Bufferd der InputStream zu lange oder sowas?

Woran kann das liegen?

Achso: Wenn ich mich via Telnet zum Server verbinde und dann Daten an alle schicke, sehe ich die in Telnet sofort und auch ohne die Vier-Ecke.


Könnt ihr mir da helfen ?

DANKEEEEE
 
Leider habe ich den C-Server zur Zeit nicht zur Verfügung, ich ich weiss nur das genau auf die gleiche Art wie nur zu einem Client geschickt wird.

wenn man einfach mal davon ausgeht, dass der Server alles richtig macht. woran könnte es dann am Applet liegen ?
 
hmm das kann viele Probleme haben.... vllt baut der broadcast deines Servers
irgendwo mist...

wenn er \n\r weglässt kann das auch durchaus ein Problem sein ( Hatte schon mal Stunden mit diesem
Fehler verbracht -.- )

Bräuchten n bisschen mehr info um dir zu helfen!

Grüße
 
Hi IceTi,

Frag den Server doch was er schickt:

Code:
int char = 0;
while((char=in.read)!=-1)
{
   System.out.println(char)
}

Jetzt werden alle Zeichen, die der Server schickt untereinander geschrieben.

Die letzten beiden müssten 13 (CR) und 10 (LF) sein.

Wenn das nicht der Fall ist, kannst Du die Methode readLine nicht verwenden.

Dann musst Du explizit auf eine Endemeldung \r oder \n abfragen.

CU
Doc
 
DocFaust hat gesagt.:
Die letzten beiden müssten 13 (CR) und 10 (LF) sein.

Wenn das nicht der Fall ist, kannst Du die Methode readLine nicht verwenden.

Dann musst Du explizit auf eine Endemeldung \r oder \n abfragen.
http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()
Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.
 
Ok, nachlesen bildet. Aber dennoch kannst Du sehen, ob Dein Server überhaupt etwas dergleichen schickt und entsprechend drauf reagieren.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben