gpt4 book ai didi

C# ReceiveAsync 错误

转载 作者:太空狗 更新时间:2023-10-29 21:36:08 30 4
gpt4 key购买 nike

我目前正在开发一个应用程序服务器。我想使用 AcceptAsync 方法。我收到错误消息“对象引用未设置为对象的实例。”调用 ReceiveAsync 方法时。如果有人提出这个问题并得到解决方案?

public class AppServer
{
public void Start()
{
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 12345));
serverSocket.Listen(100);

SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += new EventHandler<SocketAsyncEventArgs>(e_Completed);

bool raiseEvent = serverSocket.AcceptAsync(e);
if (!raiseEvent)
AcceptCallback(e);
}

void e_Completed(object sender, SocketAsyncEventArgs e)
{
AcceptCallback(e);
}

private void AcceptCallback(SocketAsyncEventArgs e)
{
SocketAsyncEventArgs readEventArgs = new SocketAsyncEventArgs();
readEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(readEventArgs_Completed);

Socket clientSocket = e.AcceptSocket;
bool raiseEvent = clientSocket.ReceiveAsync(readEventArgs); // <-- Error goes here
if (!raiseEvent)
ReceiveCallback(readEventArgs);
}

void readEventArgs_Completed(object sender, SocketAsyncEventArgs e)
{
ReceiveCallback(e);
}

private void ReceiveCallback(SocketAsyncEventArgs e)
{

}
}

最佳答案

我遇到了同样的问题,我设法解决了。您需要为 SocketAsyncEventArgs 对象提供数据缓冲区(字节数组)以存储在调用 ReceiveAsync(e) 之前收到的数据。

void e_Completed(object sender, SocketAsyncEventArgs e)
{
byte[] buffer = new byte[1024];
e.SetBuffer(buffer, 0, buffer.Length);
AcceptCallback(e);
}

关于C# ReceiveAsync 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6315256/

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