2
我想通过telnet发送一个很长的字符串到我的应用程序。套接字问题:如何接收超过3,160个字符的字符串?
在我的应用,我设置了一个插座,带:
{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) ->
接收并处理进来的来自发件人的消息。
最初,我只能发送一个大约1,500个字符的字符串,然后我添加了setopts/2命令来增加缓冲区大小。但我无法处理超过3,160位字符的插槽。
我已通过getopts打印出值,并验证它们是在setopts/2调用中表示的值。
我可以利用我的HTTP接口发表文章的字符串值,至少4倍,并通过远程登录/插座客户端可以得到他们...
我缺少什么?
从一个活动的套接字开始,然后如果一行包含我的终止符是合法的,我很好;但是如果它不切换到被动模式并且recv/2我的其余数据? – Jr0
@ Jr0:是的,这是一种方法。您可以重复'{active,once}','receive'循环。 –
如果它们长于接收缓冲区,将不会激活一次导致截断的行吗? – Jr0