2016-06-01 2 views
0

Я пытаюсь отправить кортеж, используя tcp-сокет, я использую gen_tcp: send (Socket, {elem1, elem2}), но я получаю эту ошибку, "bad value на выходном порту «tcp_inet», может ли кто-нибудь сказать мне, как я могу отправить кортеж через сокет?Отправить tuple через tcp socket в Erlang

Спасибо за ваши ответы.

ответ

1

Второй аргумент должен быть Packet:

Packet = string() | binary() | HttpPacket 

HttpPacket = HttpRequest 
      | HttpResponse 
      | HttpHeader 
      | http_eoh 
      | HttpError 
HttpRequest = {http_request, HttpMethod, HttpUri, HttpVersion} 
HttpResponse = 
    {http_response, HttpVersion, integer(), HttpString} 
HttpHeader = 
    {http_header, 
    integer(), 
    HttpField, 
    Reserved :: term(), 
    Value :: HttpString} 
... 

в вашем случае {elem1,elem2} действительно соответствует ни одному из этих типов, и вы получите сообщение об ошибке. Обычный способ отправить произвольный член является сериализовать его первым: term_to_binary(YourTerm)

и десериализации его, когда вы получаете его: binary_to_term(ReceivedBinary)

+0

Моя проблема заключается в том, что я посылаю, что кортеж к клиенту Java, вы знаете, как я десериализую его на Java? –

+0

Просмотрите этот http://erlang.org/doc/apps/erts/erl_ext_dist.html также http://stackoverflow.com/questions/7817213/erlang-serialization-library и http://stackoverflow.com/ Вопросы/15775554/how-to-deserialize-a-string-serialized-erlang-term-in-a-jinterface-object-in – Amiramix

+0

Или просто выполните сериализацию и создайте пакет самостоятельно таким образом, чтобы клиент Java знал, как получить каждый элемент и интерпретировать его. Это предполагает, что каждый элемент является тем, что имеет прямое значение для клиента Java, например, не для кортежа. :-) – rvirding

Смежные вопросы