[ERLEDIGT] Mit Java-Server kommunizieren
Übersicht

PhilonBetreff: [ERLEDIGT] Mit Java-Server kommunizieren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Philon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm okidoki ![]() ![]() 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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Philon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wow, klasse, funktioniert! ![]() |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group