Silverlight 4套接字ConnectAsync返回成功但未连接套接字

时间:2011-08-04 20:13:18

标签: silverlight sockets connection

我已启动并运行策略文件服务器。有一段时间我得到了AccessDenied,因为策略文件设置不正确。现在我不再收到这个错误,所以我知道这不是问题。我有一个简单的服务器运行简单的循环接受来自任何地址的客户端连接。我还写了一个简单的客户端,所以我知道服务器工作。在Silverlight中,我设置了我的args然后调用ConnectAsync。它立即返回localhost(有意义),当我检查事件args时,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;
        }
    }

1 个答案:

答案 0 :(得分:0)

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

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

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