你能帮帮我吗?我有一个与gen_tcp发送函数相关的问题。我一直在尝试从我的erlang服务器向flash客户端发送几个元组,大约10-15个项目,它们被解码为amf对象。
case get_tcp:send(Socket, Msg) of
ok -> io:format("sent~n");
{erorr, Err} -> io:format("~w~n", [Err])
end没有错误,但flash客户端没有接收到大约8-11个项目的全部数据。套接字选项为binary、{active,true}、{reuseaddr,true}。我已经检查了我使用客户端的网络-发送的数据包被分成两个片段,大的和小的。大的是数据包的第一个片段,小的是下一个。较大的数量与发送的消息数量相同,但较小的数量要少得多,并且与flash客户端接收的消息数量大致相同。
只有当我快速发送数据时,它才会重现,如果我缓慢地发送数据,它看起来还可以。有人知道为什么会这样吗?这将是非常有用的。
发布于 2012-03-19 22:56:30
我的猜测是,这是一个框架问题。
TCP是一种流协议,因此当您在闪存中读取时,不能保证立即获得所有消息。相反,你需要某种框架设置,比如插座选项上的{packet, 2}或{packet, 4}。这有效地将TCP从流协议转变为消息传递协议。我认为你想要后者。
发布于 2012-03-21 11:50:00
我认为你可以这样做:1在发送msg (你的元组)之前,使用term_to_binary(Msg)获取二进制文件,然后使用binary_to_term获取二进制文件的大小,然后,在你的客户端收到msg之后,使用msg获取元组。2您需要设置套接字选项的客户端和服务器{packet,2或4}
发布于 2012-03-18 00:39:54
https://stackoverflow.com/questions/9750045
复制相似问题