C# ReceiveAsync 错误

标签 c#

我目前正在开发一个应用程序服务器。我想使用 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/

相关文章:

c# - C# 中的 IPC 机制 - 使用和最佳实践

c# - TimerCallback.PerformTimerCallback 内存分配

c# - 不寻常的垃圾收集模式

c# - 点对点去中心化网络——向所有点发送消息

c# - File.ReadAllText 线程安全吗?

c# - 从反射或硬编码字符串中将方法名称提取为字符串?

c# - 在 docker 机器上调试时 MySql 连接被拒绝

c# - System.Refelection.Assembly.CreateInstance 在 .NET 4.0 中损坏

c# - 正则表达式与 C# 中的预期不匹配

c# - WPF:当 IDataErrorInfo 时在自定义 DataGrid 单元格上显示工具提示消息