1.客户端和服务端互联案例,举例中客户端和服务端都是用Erlang
服务端
1 server() -> 2 LSock = listen(), %监听本机的某个端口 3 {ok, Sock} = gen_tcp:accept(LSock), %保持监听状态,程序会停在这一步,直到有客户端连接上 4 {ok, Bin} = do_recv(Sock, []), %接收参数 5 ok = gen_tcp:close(Sock), %关闭这个监听 6 Bin. 7 8 %%监听本机的5678端口,发送的数据超过4字节才被接收 9 listen() -> 10 {ok, LSock} = gen_tcp:listen(5678, [binary, {packet, 4}, 11 {active, false}]), 12 LSock. 13 14 %%接收参数,两种情况 15 %%1.如果客户端一直发送消息,尾递归调用一直接收消息 16 %%2.如果客户端关闭连接,返回{ok, Data} 17 do_recv(Sock, Bs) -> 18 case gen_tcp:recv(Sock, 0) of 19 {ok, B} -> 20 do_recv(Sock, [Bs, B]); 21 {error, closed} -> 22 {ok, list_to_binary(Bs)} 23 end.
客户端
SomeHostInNet = "localhost", %%服务器IP {ok, Sock} = gen_tcp:connect(SomeHostInNet, 5678, [binary, {packet, 0}]), %连接上服务器, %%服务器端表现: %%1.在连接上服务器之前,服务端一直停在gen_tcp:accept(LSock), %%2.链接上服务器之后,服务端程序继续执行, %%3.执行到do_recv(Sock, []),又会处于监听状态(此时监听客户端发送的数据) ok = gen_tcp:send(Sock, "Some Data"), %发送数据,这一步可以发送很多消息 ok = gen_tcp:send(Sock, "Some Data2"), ok = gen_tcp:send(Sock, "Some Data3"), %%服务端表现:服务端一直处于接收消息状态 ok = gen_tcp:close(Sock). %关闭连接,此时服务端do_recv(Sock, [])执行完毕,继续往下执行gen_tcp:close(Sock)
时间: 2024-11-05 20:25:54