학습 중심: erlang socket client

1743 단어 socketerlang
오늘 학습 중에 문제가 발생했습니다. 기록을 작성해 보겠습니다. 저는 클라이언트를 쓰고 싶습니다. 데이터를 수신하고 발송할 수 있습니다. 코드를 썼는데 서버에서 보내온 데이터만 발송할 수 있습니다. 고민이 많았습니다. 텔레넷 127.0.0.13333로 연결하면 수신 데이터를 보내는 것은 정상적인 설명입니다. 이것은 제 클라이언트 코드 문제입니다. 바로 아래의 코드입니다.

-module(client).
-export([start/0]).
start() ->
  {ok, Socket} = gen_tcp:connect("localhost", 3333, [binary, {packet, 0}]),
  spawn(fun() -> loop(Socket) end), 
  send_msg(Socket).

loop(Socket) ->
  io:format("init....loop ~n"),
  receive
    {tcp,Socket,Data} ->    
      io:format("Received msg: ~p~n", [Data])   
  end,
  loop(Socket).

send_msg(Socket) ->
	Msg = io:get_line('Input you msg:'),   
    ok = gen_tcp:send(Socket, term_to_binary(Msg)),   
    send_msg(Socket).  

받아들일 수 없으면 인터넷에서 자료를 찾는다. 원래는 socket이 연결을 만들 때 하나의 프로세스를 생성하고 서버에서 보내온 데이터는 이 프로세스에 직접 보낸다. 나는 loop(Socket)을 다른 프로세스에 넣으면 서버에서 보내온 데이터를 자연스럽게 받아들일 수 없다. 정확한 코드는 다음과 같다.

-module(client).
-export([start/0]).
start() ->
  {ok, Socket} = gen_tcp:connect("localhost", 3333, [binary, {packet, 0}]),
  spawn(fun() -> send_msg(Socket) end), 
  loop(Socket).

loop(Socket) ->
  io:format("init....loop ~n"),
  receive
    {tcp,Socket,Data} ->    
      io:format("Received msg: ~p~n", [Data])   
  end,
  loop(Socket).

send_msg(Socket) ->
	Msg = io:get_line('Input you msg:'),   
    ok = gen_tcp:send(Socket, term_to_binary(Msg)),   
    send_msg(Socket).  


헤헤...조금 더 늘었어요.

좋은 웹페이지 즐겨찾기