[ERLEDIGT] Mit Java-Server kommunizieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Philon

Betreff: [ERLEDIGT] Mit Java-Server kommunizieren

BeitragSo, Apr 29, 2012 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,

ich bin dabei ein Spiel in Java zu schreiben und will die GUI dafür in BB schreiben. Es ist Multiplayer und soll mindestens im Lan funktionieren... Ein Server (in Java geschrieben) bedient dabei mehrere blitz3D-Clients.

Mit einem Java-Client kann der Server problemlos über TCP nachrichten austauschen, aber wenn ich den Client in BB implementiere, empfängt dieser keine Daten vom Server (Nachrichten vom Client erreichen den Server schon!)

So etwas wie "Kompatibilitätsprobleme" sollte es bei TCP ja eigentlich nicht geben?!
Ich poste mal meinen Testcode:

Code: [AUSKLAPPEN]
Graphics 800, 600, 24, 2

frameTimer = CreateTimer(2)

Global serverStream

serverStream = OpenTCPStream("127.0.0.1", 4444)
If Not serverStream RuntimeError "Connection failed."
Print "Connected to Server"

While Not KeyHit(1)
   WaitTimer(frameTimer)   
   
   WriteLine serverStream, "test1"
   
   While ReadAvail(serverStream)
      Print ("Server: " + ReadLine(serverStream))
   Wend
   
Wend
CloseTCPStream(serverStream)
End


Was beim Server ankommt: Einmal die Sekunde ein "test1". Er schickt auch immer eine Antwort per

EDIT:
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
outputLine = game.processInput(inputLine); //outputLine = "echo: " + inputLine
out.println(outputLine);



aber bb3d hat noch keine einzige antwort auslesen können...

Ich hoffe ihr könnt mir helfen!
LG
  • Zuletzt bearbeitet von Philon am Mo, Apr 30, 2012 10:31, insgesamt 2-mal bearbeitet

Holzchopf

Meisterpacker

BeitragSo, Apr 29, 2012 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin zwar nicht der Java-Profi - aber schreibst du mit Code: [AUSKLAPPEN]
out.println(outputLine);
nicht bloss in den stdout? Die Antwort müsstest du dann schon in den TCP-Stream schreiben Confused Kannst du mal den relevanten Java-Code reinstellen bitte?

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Philon

BeitragSo, Apr 29, 2012 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe die relevante Zeile nachgetragen.

Zum Verständnis: Ich habe eine Java Klasse, MultiServer, die mehrere ServerThreads startet (einen für jeden spieler).

hier die Zeilen dazu:

new ServerThread(serverSocket.accept(), game).start(); //aufruf
und
public ServerThread(Socket newClientSocket, Game newGame) {} //konstruktor

Holzchopf

Meisterpacker

BeitragSo, Apr 29, 2012 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm okidoki Confused Könnte jetzt noch sein, dass BB in jedem Fall ein CR+LF erwartet, aber Java aus irgendwelchen Gründen - wohl weil's Teufelswerk ist Rolling Eyes - nur eines von beidem anhängt. Was genau meinst du mit Zitat:
bb3d hat noch keine einzige antwort auslesen können...
?

Schreibt dir BB gar nie "Server: " ? Dann wäre ReadAvail zumindest immer 0. Versuch' mal, WaitTimer direkt nach WriteLine einzufügen. Bis er beim ReadAvail ankommt, programmflussmässig, ist eh unter absolut keinerlei Umständen _die_ Antwort aufs vorherige WriteLine wieder zurück. Aber eigentlich sollte er diese dann zumindest beim nächsten Hauptschleifendurchlauf empfangen haben.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Philon

BeitragSo, Apr 29, 2012 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es probiert, wie erwartet hat die Änderung mir aber leider nichts gebracht. Ich bekomme nicht einmal ein "Server: ", readavail() liefert also tatsächlich immer 0.

ich weiss ehrlich gesagt nicht mehr weiter :/
danke für die hilfe soweit!

Tobchen

BeitragMo, Apr 30, 2012 2:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht, wo das Problem beim PrintWriter ist...

aber wenn du in Java einen DataOutputStream nimmst, klappt alles:

Code: [AUSKLAPPEN]
public static void main(String argv[]) throws Exception {
      String clientSentence;
      ServerSocket welcomeSocket = new ServerSocket(4444);

      Socket connectionSocket;

      connectionSocket = welcomeSocket.accept();

      BufferedReader inFromClient = new BufferedReader(new InputStreamReader(
            connectionSocket.getInputStream()));

      DataOutputStream outToClient = new DataOutputStream(
            connectionSocket.getOutputStream());

      while ((clientSentence = inFromClient.readLine()) != null) {
         System.out.println("Received: " + clientSentence);
         outToClient.writeBytes(clientSentence + '\n');
      }
   }

(Quelltext ist eine noch lange nicht perfekte Abwandlung von A Simple Java TCP Server and TCP Client, aber es handelt sich hier ja nicht um ein Java-Forum.
Einfach etwas anderes nehmen, nur weil das Ursprüngliche nicht klappt, ist natürlich keine gute Art. Aber bis jemand eine PrintWriter-Lösung findet, kann man immerhin das benutzen, yay.)
Tobchen - die Welt von Tobi!
 

Philon

BeitragMo, Apr 30, 2012 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
wow, klasse, funktioniert! Smile auch wenn ich zu gern wissen würde an was es jetzt genau lag... aber erstmal markiere ich das problem als gelöst!

Holzchopf

Meisterpacker

BeitragMo, Apr 30, 2012 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr gut. Na dann schiebe ich das mal für die Nachwelt noch in die richtige Kategorie, weil es nichts spezifisch mit B3D zu tun hat.

~VERSCHOBEN~

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group