【问题标题】:Silverlight 4 Socket ConnectAsync returns Success but socket is not connectedSilverlight 4 Socket ConnectAsync 返回 Success 但未连接套接字
【发布时间】:2014-02-04 00:45:06
【问题描述】:

我有一个策略文件服务器正在运行。有一段时间我收到了 AccessDenied,因为策略文件设置不正确。现在我不再收到那个错误,所以我知道这不是问题所在。我有一个简单的服务器运行简单的循环来接受来自任何地址的客户端连接。我还写了一个简单的客户端,所以我知道服务器可以工作。在 Silverlight 中,我设置了我的参数,然后调用 ConnectAsync。它立即在 localhost 上返回(有意义),当我检查事件参数 LastOperation 是 Connect 并且 SocketError 是 Success 时。但是,当我检查我的套接字时,它根本没有连接。有任何想法吗..?为此,我已经把头撞在墙上好几个小时了。

我尝试过的其他一些事情。我将服务器从本地机器上移到另一台服务器上。仍然没有工作。我做了一个数据包捕获并注意到它正在接收 Poilcy 文件,但之后,浏览器没有发送数据包来尝试连接到其他服务器。

    public void Connect(string ip)
    {
        SocketAsyncEventArgs saea = new SocketAsyncEventArgs();
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        var endpoint = new IPEndPoint(IPAddress.Parse(ip), 4502);
        saea.UserToken = socket;
        saea.RemoteEndPoint = endpoint;
        saea.Completed += new EventHandler<SocketAsyncEventArgs>(AsyncEventComplete);
        var completedSync = socket.ConnectAsync(saea);
        if (completedSync)
        {
            AsyncEventComplete(null, saea);
        }

        Result = ip;
    }

    void AsyncEventComplete(object sender, SocketAsyncEventArgs e)
    {
        switch (e.LastOperation)
        {
            case SocketAsyncOperation.Connect:
                MessageBox.Show("CONNECTED");
                break;
            case SocketAsyncOperation.Receive:
                MessageBox.Show("DATA RECEIEVED");
                // do stuff
                break;
        }
    }

【问题讨论】:

    标签: silverlight sockets connection


    【解决方案1】:

    我认为你应该使用 e.SocketError 而不是 e.LastOperation

    您也可以使用 e.ConnectSocket(仅在 Silverlight 中)

    您还应该在这种情况下添加一个“非”:if (! completedSync)

    【讨论】:

    • 是的,我同意 J-L。亲爱的 Partrick,您应该使用条件:e.SocketError == SocketError.Success
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多