gpt4 book ai didi

C# 异步套接字 BeginSend

转载 作者:太空宇宙 更新时间:2023-11-03 22:24:13 24 4
gpt4 key购买 nike

我想了解以下方面的一些信息:

Socket.BeginSend Method (array<Byte>[]()[], Int32, Int32, SocketFlags, AsyncCallback, Object)

client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(SendData), client);

如果 message.lenght 大于缓冲区大小 (32),我是否必须多次调用 BeginSend 才能传输整个数据包?

或者我只是在另一端进行多次读取,直到接收到实际缓冲区长度的末尾?

这是我在实际实现之前阅读文档时的讨论。

谢谢。

最佳答案

缓冲区大小不是 32,它恰好是定义的 message.Length。您可能会将 Int32 与值 32 混淆。

在上述情况下,只要实际消息大小小于 2147483648 (2^31),您就可以一次调用该方法发送它。

在接收端你有几个选择:

  1. 如果不知道消息大小,您可以使用循环逐 block 读取它,直到一个 Receive 调用返回小于完整 block 大小为止。
  2. 如果消息的前几个字节(即消息头)包含其长度,那么您可以先读取消息头,然后分配足够的缓冲区空间以在一次调用中读取整个消息。
  3. 如果保证消息大小小于一定数量,您可以分配一个足够大的缓冲区,保证在一次调用中读取任何消息。

关于C# 异步套接字 BeginSend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1995929/

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