2017-10-23 3 views
0

Hier Senden ist mein Java-Server-Code:Daten von einem Java-Server in einer fortlaufenden Weise

public class CaspSocket { 

    private Socket socket = null; 
    private PrintWriter out = null; 
    private BufferedReader in = null; 

    public CaspSocket(InetAddress caspAddress, int caspPort) throws IOException { 
     socket = new Socket(caspAddress, caspPort); 
     out = new PrintWriter(socket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    } 

I "out" verwenden, um Daten zu senden

out.print(1 + "|"); 
out.print(2 + "|");         
out.print(3 + "|"); 

Es in Gamemaker Studio aufgenommen werden als folgt:

var in_buff = ds_map_find_value(async_load, "buffer"); 
test_string=buffer_read(in_buff, buffer_string); 

auf diese Weise alles in einem einzigen String gesetzt werden

test_string = "1 | 2 | 3 |"

Allerdings möchte ich die Daten in in einer aufeinander folgenden Weise erhalten

var in_buff = ds_map_find_value(async_load, "buffer"); 
test_string=buffer_read(in_buff, buffer_string); 
test_string2=buffer_read(in_buff, buffer_string);   
test_string3=buffer_read(in_buff, buffer_string); 

test_string = "1 |" geben, test_string2 = "2 |" test_string3 = "3 |"

Wie sende ich Daten aus dem Java-Server in einer aufeinanderfolgenden Art und Weise, so dass jedes Datenpaket einzeln ausgelesen wird mit buffer_read(in_buff, buffer_string); in Gamemaker Studio

Edit: Ich habe die Verwendung von Puffer-Leseabschnitt der Problem ist, wenn ich in Gamemaker Studio auf den Server mit dieser schicken:

buffer_seek(Buffer, buffer_seek_start, 0); 
buffer_write(Buffer, buffer_string, string(1) + chr(10)); //chr(10) means new line  
buffer_write(Buffer, buffer_string, string(2) + chr(10)); 
buffer_write(Buffer, buffer_string, string(3) + chr(10)); 
network_send_raw(Socket, Buffer, buffer_tell(Buffer)); 

der Java-Server nur wieder eine Zeichenfolge senden:

var in_buff = ds_map_find_value(async_load, "buffer");  
buffer_read(in_buff, buffer_string); 

Ich weiß nicht, wie diese der Reihe nach den Java-Server gesendet werden soll, wie es in GM empfangen werden kann: S:

var in_buff = ds_map_find_value(async_load, "buffer"); 
test_string=buffer_read(in_buff, buffer_string); 
test_string2=buffer_read(in_buff, buffer_string);   
test_string3=buffer_read(in_buff, buffer_string); 

werde ich nur buffer_string verwenden die Dinge einfacher zu machen.

Antwort

0

Die Socket-Kommunikation basiert auf dem Konzept der Streams. Streams sind reine Bytefolgen und es gibt keine Möglichkeit, wie Sie steuern können, wie sie gesendet werden. Der eigentliche Transport wird vom Betriebssystem-Protokolltreiber verwaltet und ist nicht von der Anwendungsebene aus zugänglich. Basierend auf den Mehrfachbedingungen

kann in einem einzelnen Paket oder mehreren Paketen geliefert werden. Sogar flush() Methode wird nur Daten in OS-Puffer schieben und garantieren Ihnen nichts über die tatsächliche Lieferung.

So lesen Nachrichten sequentiell Sie

  1. Äther sollten ihre Größen kennen und in die Puffer der erwarteten Größe lesen (möglicherweise eine Art von „header“ fester Größe Daten senden zuerst, welche die Größe erzählen der „Körper“ Daten als nächstes, dann nächste „header“ usw.)
  2. Lesen sie die komplette verfügbaren Inhalte und spaltete es in der Client-App-Daten Trennzeichen verwenden (es Ihrem Fall das scheint | Charakter)
  3. zu sein
+0

Danke! Ich habe Methode 2 vorher probiert, da ich mit Java nicht sehr erfahren bin. In GameMaker Studio wird der gesamte Inhalt in einer Variablen gespeichert und aufgeteilt. Dabei können jedoch auch andere Daten in derselben Variablen empfangen und gespeichert werden, wodurch Daten gemischt werden. Welcher Java-Code sollte in diesem Fall für Methode 1 verwendet werden? –

+0

Aktivieren Sie die Option [Puffer verwenden] (https://docs.yoyogames.com/source/dadospice/002_reference/buffers/using%20buffers.html), um zu erfahren, wie Daten gesendet und gelesen werden können. –

+0

Mit # 2 können Sie zentralisierte Leser haben, die später empfangene Nachrichten in Ihrer App-Basis auf Inhalte verteilen. –

Verwandte Themen