gpt4 book ai didi

java - 使用 gen_tcp :send doesn't get sent until the socket is closed 的消息

转载 作者:行者123 更新时间:2023-12-03 11:56:28 24 4
gpt4 key购买 nike

我想编写一个简单的客户端,将消息发送到服务器并接收响应。我有一个服务器,它向所有连接的客户端广播相同的消息,并且在我使用 telnet 测试它时它正在工作。当我尝试使用 Erlang shell 执行此操作时, gen_tcp:send 在关闭套接字之前不会发送任何消息。

这就是我想要做的:

{ok, S} = gen_tcp:connect(IP, Port, []).
gen_tcp:send(S, "Test").
flush().

通过查看我的 telnet 客户端,我可以看到当我关闭套接字时发送了消息。

Erlang version:R14B01 (erts-5.8.2)



更新

hdima 评论说服务器从流中提取消息的方式可能是错误的。这似乎是因为当我尝试编写自己的服务器时,客户端似乎按预期工作。我将尝试获取服务器的源代码。顺便说一句,服务器是用 Java 编写的。

最佳答案

当发送小块数据时,套接字会缓冲它们以尝试填充 TCP 数据包的最大有效负载。

这可能是正在发生的事情,因为当您关闭套接字时,它会在释放之前被刷新。

尝试设置

{nodelay, true}

socket 上的选项。

更多信息在这里:
http://www.erlang.org/doc/man/inet.html#setopts-2

关于java - 使用 gen_tcp :send doesn't get sent until the socket is closed 的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com