c# - Windows Phone 7 和套接字 : What am I doing wrong?

标签 c# sockets windows-phone-7

所以我建立了一个连接,一切正常,然后我开始设置代码以从服务器读取数据包。我想要构建它的方式是使用一种数据包标识符方法,该方法读取单个字节(数据包 ID)并分支到适当的方法以读取其余部分。问题在于那里的最后一条语句 - 一切正常,直到我分支,当我得到这个异常时:

An asynchronous socket operation is already in progress using this SocketAsyncEventArgs instance.

总体思路如下:

    private void IdentifyPacket(object sender, SocketAsyncEventArgs e)
    {
        e.Completed -= new EventHandler<SocketAsyncEventArgs>(IdentifyPacket);
        if (e.SocketError != SocketError.Success)
        {
            ForceDisconnectWithError(new SocketErrorEventArgs(netSocket, e.SocketError));
            return;
        }

        PacketID packet = (PacketID)e.Buffer[0];

        switch (packet)
        {
            case PacketID.KeepAlive:
                e.SetBuffer(new byte[4], 0, 4);
                e.Completed += new EventHandler<SocketAsyncEventArgs>(HandleKeepAlive);
                e.ConnectSocket.ReceiveAsync(e);
                break;
            default:
                RelinkPacketManager();
                break;
        }
    }

    private void RelinkPacketManager()
    {
        socketConfig.SetBuffer(new byte[1], 0, 1);
        socketConfig.Completed += new EventHandler<SocketAsyncEventArgs>(IdentifyPacket);
        netSocket.ReceiveAsync(socketConfig);
    }

想法?

最佳答案

如果你得到一个Packet.KeepAlive,你会发送另一个请求吗?或者只是等待接收更多数据? 如果您需要获取剩余的数据字节,您可能已经在 e.Buffer[0] 之后的字节响应中拥有它。 因此,与其事先设置缓冲区大小,不如尝试完全解析您的响应。

希望对您有所帮助。

编辑: 试试这个

SocketAsyncEventArgs args;
switch (packet)
        {
            case PacketID.KeepAlive:
                args.SetBuffer(new byte[4], 0, 4);
                args.Completed += new EventHandler<SocketAsyncEventArgs>(HandleKeepAlive);
                e.ConnectSocket.ReceiveAsync(args);
                break;
            default:
                RelinkPacketManager();
                break;
    }

关于c# - Windows Phone 7 和套接字 : What am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678706/

相关文章:

c# - IsAssignableFrom、IsInstanceOf 和 BaseType 测试

c# - 带套接字的C#线程

c - 使用套接字时如何获得下载速度?

silverlight - WP7 - 动画添加/删除列表框中的项目

sockets - 移动设备 socket : Keep open vs reconnect on each request

c# - 如何编辑模型的 ChildCollection?

c# - 使用 C# 创建新的 sql server 表

c# - 如何使用 Rest API 在 azure 表中使用延续 token

c - poll() 什么时候返回 POLLERR

silverlight - 滚动文本 block