Socketverbindung klappt nicht :-(

Ansics

Cadet 4th Year
Registriert
Mai 2003
Beiträge
107
Hi,

ich bekomm keine Kommunikation über zwei Sockets zwischen meinem Handy und dem PC hin. Das ganze klappt noch nichtmal im Emulator von Sun ... also hier mal kurz ganz einfach was ich mache (Exceptionhandling und den anderen Kram mal beiseite gelassen).

1) Server macht folgendes:

Code:
serverSocket = new ServerSocket(8080);
clientSocket = serverSocket.accept();
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
while (true) {
   lastReceivedMessage = in.readLine();
   out.write(lastReceivedMessage.toUpperCase()); 
   out.newLine();
   out.flush();
}

Wie gesagt. Der Code ist gekürzt. Die Idee ist, dass der Server nach Inizialisierung der Verbindung ne Schleife startet in der immer wieder das gleiche gemacht wird (Nachricht an den Client zurücksenden). Der Client macht folgendes:

Code:
socket = (SocketConnection)Connector.open("socket://localhost:8080", Connector.READ_WRITE);
is = socket.openInputStream();
os = socket.openOutputStream();
osS = new PrintStream(os);
isR = new InputStreamReader(is);

public void sendReceive() {
   osS.print(message);
   osS.flush();
   isR.read
}

Der Client soll also durch drücken auf einen Knopp die Methode sendReceive aufrufen. Der Plan ist so:
Der Server blockiert sobald die Methode readLine erreicht ist (funktioniert auch). Durch Drücken auf "senden" wird sendReceive aufgerufen und der Client sendet was (klappt anscheinend nicht, da die Methode readLine vom Server nach wie vor blockiert ist. Der Client sollte dann zumindest bei isr.read() stehenbleiben, da ja kein Inhalt im Stream ist, da der Server ja noch nichts senden kann, weil er blockiert ist (Client bleibt aber nicht bei isR.read() stehen sondern rattert weiter). Auch wenn ich nochmal senden drücke bügelt der Client über diese Zeilen m unter weg ohne ein blockierendes Lesen heraufzubeschwören.

Was um alles in der Welt mach ich falsch?

VG
Ansics
 
Du benutzt einen cast in ein SocketConnection-Objekt. In der API kann ich diese mir unbekannte Klasse nicht finden. Bin ich zu blöd, oder benutzt du da was externes? Vielleicht wäre es besser wenn du auch den kompletten Code posten würdest.

klappt anscheinend nicht, da die Methode readLine vom Server nach wie vor blockiert ist
Bist du dir 100%ig sicher, dass die Schleife im Server nicht doch einmal durchlaufen wird?

Der Client sollte dann zumindest bei isr.read() stehenbleiben, da ja kein Inhalt im Stream ist
Naja, entweder hat der Stream doch gültige Daten (siehe oben) oder du solltest mal auf Exceptions achten.
 
Ah schon gut. Der Fehler war, dass ich vom Client noch nen "\n" schicken musste damit readLine weiter macht.

Alles klar! Danke!
 
Zurück
Oben