标签: gen-tcp

使用 gen_tcp:send/2 通过套接字发送消息

如何使用 gen_tcp 在 erlang 中发送 [Integer, String] 形式的消息。

例如:我希望使用 gen_tcp:send/2 通过套接字发送 [25, "Hello"] 或 [50, "Hi"] 形式的消息。

我尝试做[ID | Msg] 但这没有帮助。谢谢

erlang tcp erlang-otp gen-tcp

1
推荐指数
1
解决办法
761
查看次数

在gen_tcp中使用{packet,N}以及如何在c ++程序中接收数据

当通信的两端都基于erlang并且文档清楚地表明使用{packet,N}附加了具有消息大小的头部并且gen_tcp:recv/2在接收时移除了头部时,我已经工作了.这非常简单.但是,如果接收程序不是基于erlang而是基于c ++,那么我如何只解析标题并知道消息的大小,以便我可以分配该数量的内存.我用到现在,

//Receive a message from client
while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 )
{

    //end of string marker
    client_message[read_size] = '\0';
    write(sock , client_message , strlen(client_message));
    //clear the message buffer
    memset(client_message, 0, 2000);
}
Run Code Online (Sandbox Code Playgroud)

但不知道如何获得该标头然后使用ei_module来获得真正的解码值.

这就是我解码消息的方式.

这里的代码 这是客户端使用选项{packet,0}连接时所以没有大小的标头.为了允许动态内存分配,我开始使用{packet,N}但不确定如何读取该标头?先感谢您.

c++ erlang tcp gen-tcp

1
推荐指数
1
解决办法
244
查看次数

如何使用gen_tcp在Elixir中的活动套接字上检测TCP超时?

我有一个GenServer通过连接到远程TCP连接的gen_tcp

opts = [:binary, active: true, packet: :line] {:ok, socket} = :gen_tcp.connect('remote-url', 8000, opts}

我正在处理以下消息:

def handle_info({:tcp, socket, msg}, stage) do IO.inspect msg {:noreply, state} end

哪个很棒。但是,TCP服务器容易超时。如果使用gen_tcp.recv,则可以指定超时。但是,我使用active: true来接收消息handle_info,而不必遍历和调用recv。因此,GenServer即使服务器已超时,也愉快地等待下一条消息。

GenServer如果X秒后仍未从TCP连接接收到消息,该如何触发函数?我会坚持使用recv吗?

erlang elixir gen-tcp

1
推荐指数
1
解决办法
616
查看次数

{active, false}, {active, true} 和 {active, once} 有什么区别?

您可能知道,gen_tcp 有三种模式。{active, false}{active, true}{active, once}

我已经阅读了一些关于{active, false},{active, true}和 的文件{active, once}。然而,我没有得到它。

{active, false}{active, true}和 和有什么不一样{active, once}

能不能简单解释一下?

erlang networking tcp elixir gen-tcp

1
推荐指数
2
解决办法
1284
查看次数

通过套接字发送确切的字节数

我已经在使用gen_tcp的Erlang中读到了通过套接字发送的数据可以在单个流中聚合.如何强制套接字发送完全特定数量的字节?

erlang gen-tcp

0
推荐指数
1
解决办法
552
查看次数

标签 统计

erlang ×5

gen-tcp ×5

tcp ×3

elixir ×2

c++ ×1

erlang-otp ×1

networking ×1