Erlang gen_tcp подключить вопрос - PullRequest
5 голосов
/ 25 апреля 2011

Простой вопрос ...

Этот код ..

client() ->
    SomeHostInNet = "localhost" % to make it runnable on one machine
    {ok, Sock} = gen_tcp:connect(SomeHostInNet, 5678, 
                                 [binary, {packet, 0}]),
    ok = gen_tcp:send(Sock, "Some Data"),
    ok = gen_tcp:close(Sock).

очень ясно, за исключением того, что Я не совсем понимаю, что [двоичный, {пакет, 0}] означает ? Кто-нибудь хочет объяснить?

MadSeb

Ответы [ 2 ]

10 голосов
/ 25 апреля 2011

Согласно документации gen_tcp: connect :

  • [binary, {packet, 0}] - список опций, передаваемых функции соединения.
  • binary означает, что данные, которые отправляются / принимаются в сокете, представлены в двоичном формате (в отличие, скажем, от формата списка.
  • {packet, 0}, немного сбивает с толку и, похоже, не рассматривается в документации. Поговорив с некоторыми хорошо осведомленными главами в #erlang на Freenode, я обнаружил, что опция packet указывает, сколько байтов указывает длину пакета. За кулисами длина убирается из пакета, и erlang просто отправляет вам пакет без длины. Следовательно, {packet, 0} - это то же самое, что и необработанный пакет без длины, и все обрабатывается, кроме получателя данных. Для получения дополнительной информации об этом, проверьте inet: setopts .

Надеюсь, это поможет.

0 голосов
/ 26 апреля 2011

{пакет, 0} используется для указания того, что данные TCP доставляются непосредственно в приложение в неизмененном виде.

двоичный означает, что полученный пакет доставляется в двоичном виде. (но вы все равно можете использовать gen_tcp: send с сообщением типа «message»)

...