Получать двоичные данные с TCP-сервера и сохранять их в файл - PullRequest
3 голосов
/ 03 ноября 2010

Как TCP-клиент получает двоичные данные, которые он запрашивает с TCP-сервера?

Если сервер отправляет запрошенные данные (некоторые двоичные данные в определенной позиции файла), как они принимаются и сохраняются вфайл.

Ответы [ 2 ]

5 голосов
/ 03 ноября 2010

Вы используете gen_tcp: recv для получения данных.Обычная запись может затем сохранить их в файл.

4 голосов
/ 04 ноября 2010

Вот пример подключения к удаленному серверу, получения данных и записи их в файл:

-module(recv).

-export([example/1]).

recv_data(IoDevice, Sock) ->
  case gen_tcp:recv(Sock, 0) of
    {ok, B} -> 
      ok = file:write(IoDevice, B),
      recv_data(IoDevice, Sock);
    {error, Reason} ->
      error_logger:info_msg("Done receiving data: ~p~n", [Reason]),
      file:close(IoDevice),
      gen_tcp:close(Sock)
  end.

example(FileName) ->
  {ok, IoDevice} = file:open(FileName, [write, binary]),
  {ok, Sock} = gen_tcp:connect("www.google.com", 80, [binary, {packet, raw}, {active, false}]),
  ok = gen_tcp:send(Sock, "GET / HTTP/1.0\r\n\r\n"),
  recv_data(IoDevice, Sock).

Это подключится к Google и запишет ответ в файл:

Erlang R14A (erts-5.8) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8  (abort with ^G)
1> c(recv).
{ok,recv}
2> recv:example("/tmp/test.bin").

=INFO REPORT==== 4-Nov-2010::08:52:59 ===
Done receiving data: closed
ok
3> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...