套接字问题:如何收到超过3,160个字符的字符串?

时间:2011-12-09 15:49:33

标签: sockets erlang

我正在尝试通过telnet将长字符串发送到我的应用程序。

在我的应用程序中,我设置了一个套接字:

{ok, Sock} = gen_tcp:listen(Port, [{active, true}, {reuseaddr, true}],
{ok, Sock} = gen_tcp:accpet(Sock),
% start a process when someone connects
{ok, Pid} = my_sup:start_handler(Sock),
inet:setopts(Socket,[{active, once},{buffer, 2310731}, {recbuf, 1310731},{sndbuf, 1310731}]),
gen_tcp:controlling_process(Socket, Pid),

我处理连接客户端的进程是gen_server,我使用标准

handle_info ({tcp, Sock, Data}, State) ->

接收并处理来自发件人的incomming消息。

最初,我只能发送一个大约1,500个字符的字符串,然后我添加了setopts / 2命令来增加缓冲区大小。但我无法让套接字处理超过3,160个字符。

我已通过getopts打印出这些值,并验证它们是setopts / 2调用中所代表的内容。

我可以利用我的http接口POST字符串值至少4倍,并且可以通过telnet / socket客户端获取 ...

我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果您未指定packetline选项,则只会收到一个TCP数据包发送的内容。因此,如果您想要获得更多,您必须编写我们自己的接收循环和协议。其他数据只是在缓冲区中等待,但您还没有收集它们。