Erlang : Tcp Server



嗨,我是 Erlang 中的一只新蜜蜂,但设法创建了一个简单的 TCP 服务器,该服务器以被动模式接受客户端并显示消息。每次新客户端连接到服务器时,我都会生成一个新进程。有没有办法使用客户端连接时生成的进程向客户端发送消息。

这是代码。

-module(test).
-export([startserver/0]).
startserver()->
{ok, ListenSocket}=gen_tcp:listen(1235,[binary,{active, false}]),
connect(ListenSocket).
connect(ListenSocket)->
{ok, UserSocket}=gen_tcp:accept(ListenSocket),
Pid=spawn(? MODULE, user,[UserSocket]),
gen_tcp:controlling_process(UserSocket, Pid),
connect(ListenSocket).
user(UserSocket)->
case gen_tcp:recv(UserSocket, 0) of.
{ok, Binary}->% Send basic message.
{error, closed}->% operation on close. 
end.

如果我有的话,我能不能有一些东西。

Pid!{"Some Message"} .并且消息被发送到与具有非阻塞io的进程关联的套接字,

您可以尝试本教程,使用 OTP 原则编写 TCP 服务器: http://learnyousomeerlang.com/buckets-of-sockets#sockserv-revisited

如果使用gen_server而不是连接循环,则可以将 Pids 存储在该状态中。然后,您可以使用 gen_server:cast/2 向其中一个 Pids 发送消息。

您希望从控制进程向客户端发送消息的函数是gen_tcp:send(Socket,Message),因此,例如,如果您想在连接时发送一次性消息,则可以这样做:

user(UserSocket)->
gen_tcp:send(UserSocket, "hello"),
case gen_tcp:recv(UserSocket, 0) of
   {ok, Binary}->% Send basic message.
        gen_tcp:send(UserSocket, "basic message"),
   {error, closed}->% operation on close. 
        gen_tcp:send(UserSocket, "this socket is closing now"),
end.

最新更新