gpt4 book ai didi

c# - 异步BeginSend方法的使用

转载 作者:行者123 更新时间:2023-12-03 12:01:05 25 4
gpt4 key购买 nike

如果您查看此 Socket.BeginSend() 方法的签名:

public IAsyncResult BeginSend(
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
AsyncCallback callback,
Object state
)

我不了解 bufferstate参数之间的区别。我有一个自定义类(包含Socket字段和其他自定义属性)。

通过创建字节数组并使用第一个参数(因此在缓冲区中)发送它们,最好的方法是发送到另一端,或者最好使用第六个参数(状态对象)将它们发送出去?

如果我以状态发送它们,缓冲区的用途是什么?如果我在缓冲区中发送它们,状态是否仅用于StateObject类?

还有一件事,我有许多要发送到另一端的自定义(和不同的)类,并且我将必须执行一些将通过某些参数“拆分”的代码。怎么做?

最佳答案

在.NET中,BeginXxx/EndXxx异步模式通常如下所示:

IAsyncResult BeginXxx(..., AsyncCallback callback, Object state);
SomeResult EndXxx(IAsyncResult result);

状态对象是您传递的任何对象,以便您可以通过调用 EndXxx属性在回调或 IAsyncResult.AsyncState方法中检索状态。

state参数仅用于支持此模式,不用于通过套接字发送任何内容。仅缓冲区中的数据将通过套接字发送。

我对问题的最后一部分不太了解,但是如果您想通过套接字发送对象,则可以将对象序列化为 byte[],通过套接字发送,然后在另一端反序列化。如果这不是您要的内容,请告诉我。

关于c# - 异步BeginSend方法的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13064394/

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