2016-04-08 8 views
0

So senden Sie eine Nachricht der Form [Integer, String] in Erlang mit gen_tcp.Senden einer Nachricht über einen Socket mit gen_tcp: send/2

ZB: Ich suche Nachrichten des Forms [25, "Hallo"] oder [50, "Hi"] über einen Socket mit gen_tcp: send/2.

Ich habe versucht, [ID | Msg] aber das hilft nicht. Dank

+0

Hier ist eine nette Einführung, wie man das macht: http://learnyousomeerlang.com/buckets-of-sockets Auch die offizielle Dokumentation hat einige Beispiele: http://erlang.org/doc/man/gen_tcp. html Für eine genauere Antwort müssen Sie ein Code-Beispiel veröffentlichen, das Sie ausprobiert haben, und es funktioniert nicht für Sie. – Amiramix

Antwort

3

In Erlang, eine Zeichenfolge ist nur eine Liste von ganzen Zahlen, so dass die Liste [25, "Hello"] tatsächlich vertreten wie [25, [72,101,108,108,111]]

Es bleibt die Frage, wie diese Informationen über einen Sockel in Erlang zu senden.

Nach dem documentation, in Erlang können Sie die Daten als binäre oder als Liste, senden, die Sie festlegen können, entweder als {mode, binary} oder {mode, list}, wenn Sie den Sockel erstellen.

Im Fall, dass Sie mit binären Daten arbeiten (die Beratung, da das Senden und Empfangen von Binärdateien ist schneller als Listen), können Sie so etwas wie tun:

{ok, Socket} = gen_tcp:connect(Host, Port, [{mode, binary}]). 
Data = list_to_binary([25, "Hello"]). 
gen_tcp:send(Socket, Data). 

Nun, wenn Sie Ihre verwenden Steckdose in Liste Modus, können Sie die Liste nur direkt an:

{ok, Socket} = gen_tcp:connect(Host, Port, [{mode, binary}]). 
Data = [25, "Hello"]. 
gen_tcp:send(Socket, Data). 

auf der Server-Seite, wenn Sie die Daten in einem Sockel erhalten, die in Liste Modus konvertieren Sie zurück zu Ihrem ursprünglichen Format mit:

[Integer|String] = ListReceived. 

Wenn Sie die Daten in einem Sockel mit binären Modus empfangen, dann müssen Sie die Daten aus einem Binary auf eine Liste umwandeln, wie:

[Integer|String] = binary_to_list(BinaryReceived).