如何创建C#Compact Framework非阻塞套接字

| 我正在尝试在WM6 C#中创建一个非阻塞套接字,但我不断收到以下编译器错误: \“非阻塞套接字不支持同步调用。设置Blocking = true或使用异步方法。” 但是,当我使用BeginReceive()异步方法时,EndReceive()被阻止。与BeginSend()和EndSend()相同。您如何在紧凑框架内实现无阻塞套接字? 这是我的代码。我没有使用AsyncCallback方法,因为我想返回bytesRecv和bytesSent变量。
    private void asyncReceive(byte[] recvBytes, int offset, int size, SocketFlags sf)
    {
        IAsyncResult asyncResult = null;
        int recvBytes = 0;

        try
        {
            asyncResult = _socket.BeginSend(sendBytes, offset, size, sf, null, null);
            recvBytes = _socket.EndSend(asyncResult);  // <-- This blocks even with _socket.Blocking = false;
        }
        catch (SocketException)
        {
            //Check SocketException.ErrorCode...
        }

        return recvBytes;
    }  
已邀请:
似乎您错过了要点-您所看到的行为是设计使然。我建议阅读.NET中的异步编程(很多资源,也许从这里开始)。使用BeginXXX进行非阻塞套接字读取/写入将允许您启动发送/接收,然后执行其他操作,并在完成后(通过AsyncCallback)由内核通知,此时您将调用相应的EndXXX方法以获取结果。如果您在操作完成之前在BeginXXX调用之后立即调用EndXXX,则它被设计为阻塞直到完成。 为了获得非阻塞行为,您需要对代码进行一些分解,以正确处理回调(例如,将结果封送回UI,无论如何)。在底层内核位实际完成发送/接收多少字节之前,您将没有答案。

要回复问题请先登录注册