C# 如何使用Socket.BeginReceive重载3?

C# 如何使用Socket.BeginReceive重载3?,c#,.net,sockets,asynchronous,C#,.net,Sockets,Asynchronous,您好,我想对async服务器使用方法Socket.BeginReceive(Byte[],Int32,Int32,SocketFlags,AsyncCallback,Object)。我只是想知道如何设置AsyncCallback的方法来获取缓冲区 我喜欢这样的设置: socket.BeginReceive(buffer, 0, size, SocketFlags.None, new AsyncCallback(receive), someObject); public void receive

您好,我想对
async
服务器使用方法
Socket.BeginReceive(Byte[],Int32,Int32,SocketFlags,AsyncCallback,Object)
。我只是想知道如何设置
AsyncCallback
的方法来获取缓冲区

我喜欢这样的设置:

socket.BeginReceive(buffer, 0, size, SocketFlags.None, new AsyncCallback(receive), someObject);

public void receive(IAsyncResult ar) {
    // How to get buffer?
}

如果我向receive方法添加一个参数,我会得到一个错误。那么我应该如何设置该方法呢?在MSDN上没有什么方法可以做到这一点

您可以使用state参数:

socket.BeginReceive(buffer, 0, size, SocketFlags.None, receive, buffer/*state*/);

public void receive(IAsyncResult ar) {
    // How to get buffer:
    var buffer = (byte[])ar.AsyncState;

    var bytesRead = socket.EndReceive(ar);

}

这个缓冲区会有接收到的数据吗?嗯,但是我想发送一些其他的东西作为异步状态。只是这个方法的重载3看起来太没用了,所以我只是想知道它是不是:P@Arbitur:发送包含所需所有变量的类。是否确实要使用旧的APM编程模型(开始/结束对)?如果您使用的是.net4.5,请尽可能将TaskAsync API与async/await结合使用。相比之下,APM风格的编程是受虐狂。我会重新考虑我的方法。