在erlang中从TCP服务器发送消息

在erlang中从TCP服务器发送消息,erlang,erlang-shell,Erlang,Erlang Shell,我刚从二郎出发。我想在Erlang中创建一个TCP服务器。我的TCP客户端在Android上运行并连接到服务器。 我已从中获取TCP服务器实现 我能够运行服务器,将客户端连接到服务器,并将消息从客户端发送到服务器。此外,服务器中的逻辑是,无论何时从客户端接收到消息,它都会将相同的消息发送回客户端 所有这些都很好,我唯一的问题是如何从erlang shell向客户机发送消息(而不必等待来自客户机的消息)。gen_tcp:send()函数需要套接字句柄作为输入,每当客户端发送消息时,都会有一个回调

我刚从二郎出发。我想在Erlang中创建一个TCP服务器。我的TCP客户端在Android上运行并连接到服务器。 我已从中获取TCP服务器实现

我能够运行服务器,将客户端连接到服务器,并将消息从客户端发送到服务器。此外,服务器中的逻辑是,无论何时从客户端接收到消息,它都会将相同的消息发送回客户端


所有这些都很好,我唯一的问题是如何从erlang shell向客户机发送消息(而不必等待来自客户机的消息)。gen_tcp:send()函数需要套接字句柄作为输入,每当客户端发送消息时,都会有一个回调,并且它具有套接字句柄,因此可以使用套接字句柄将消息发送回客户端,但如何执行此操作?

在服务器端,您必须在某个位置接受连接:

 {ok, Sock} = gen_tcp:accept(LSock)
我想你可以向那个插座发送一条信息:

gen_tcp:send(Sock, YourPacket)
如果不接受连接,则它不是服务器

更新以回答评论

一种方法是共享侦听器套接字(
LSock
)。您可以将其保存在可访问的ETS上,并从shell调用接受器,尽管它不是侦听器的所有者

否则,您将不得不在服务器上包装所有内容,使打开的套接字保持在
状态
,并编程一个句柄以向打开的套接字发送消息。可以找到一个关于套接字服务器的很好的解释

我刚从二郎出发。我想在Erlang中创建一个TCP服务器

我认为问题在于您使用的软件在客户端和服务器之间建立了通信通道:

(client) ================== (server)
现在您有了第三个实体:

(client) ================== (server)

          (erlang shell)
您希望erlangshell与客户机通信。这很好,但是您使用的代码没有提供这方面的功能。听起来您还希望客户端充当erlang shell的服务器。为什么需要erlang shell向客户端发送消息

erlang shell可以成为服务器的第二个客户端:

(client) ================== (server)

(erlang shell) ============ (server)
但这无助于erlang shell直接与客户机通信。erlang shell可以向服务器发送一些信息,服务器可以将这些信息存储在状态中,然后服务器可以在客户端下次发出请求时将状态传递给客户端

如果erlang shell具有客户端的Pid,则erlang shell始终可以执行以下操作:

Pid ! "hello client"

如果客户端正在接收语句中等待,则客户端可以从其邮箱中提取该消息。您的客户机是什么样子的?

是的,在服务器上通过{ok,Sock}=gen_tcp:accept(LSock)(在tserver.erl的第39行)接受连接,但我的问题是,当我运行命令时,如何在shell上获得这个“Sock”?我正在通过test:start()运行服务器。(test.erl是一个文件,start()是其中一个启动服务器的函数)所以当我在shell上运行这个时,如何获得上面提到的“Sock”?一旦我得到“Sock”,我就知道我可以使用gen_tcp:send()发送消息。我是不是遗漏了什么?