gpt4 book ai didi

c# - 一个 BeginReceive 中的多个消息

转载 作者:可可西里 更新时间:2023-11-01 02:53:02 25 4
gpt4 key购买 nike

如果客户端通过同一个套接字向服务器发送多条消息,服务器端的 EndReceive 是否会将消息分开,或者服务器是否有可能在单个 BeginReceive 中接收来自两个单独发送的部分消息?

最佳答案

假设是 TCP,套接字上没有消息边界。一个发送可能被多个接收消耗,反之亦然,并且是部分的。将 TCP 套接字视为流。要么发送固定大小的消息,以便您知道要读取多少字节,要么将消息大小嵌入消息本身(最好是在消息的最开头),这样您就可以随时了解。

编辑:

回答您评论中的问题 - 不仅仅是“MS 操作系统”在做这件事 - 它是连接两端的 TCP/IP 堆栈。写入套接字的字节在内核中缓冲,并在网络堆栈认为是最佳时间时通过网络发送(内核超时已到,输出队列达到 TCP 窗口大小等 - 一切都在细节中TCP 的工作原理)。对于 TCP(但不是 UDP)内核不跟踪应用程序写边界,只跟踪有多少字节要发送,有多少字节被确认,等等。它是一个流,操作系统 不知道关于应用程序消息,只有字节。

关于c# - 一个 BeginReceive 中的多个消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878361/

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