2011-08-04 38 views
2

我有一个策略文件服务器已启动并正在运行。有一段时间我得到了AccessDenied,因为策略文件设置不正确。现在我不再收到该错误,所以我知道这不是问题。我有一个简单的服务器运行这个简单的循环来接受来自任何地址的客户端连接。我也写了一个简单的客户端,所以我知道服务器的工作原理。在Silverlight中,我设置了我的参数,然后调用ConnectAsync。它直接返回本地主机(有道理),当我检查事件参数时,LastOperation是Connect,SocketError是Success。但是,当我检查我的套接字时,它根本没有连接。有任何想法吗..?几个小时后,我的头撞在墙上。Silverlight 4 Socket ConnectAsync返回成功,但套接字未连接

我试过的其他一些东西。我将服务器从本地盒子移到另一台服务器上。仍然没有工作。我做了一个数据包捕获,并注意到它正在接收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; 
     } 
    } 

回答

0

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

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

你还应该加上“不”,在这个条件:if(!completedSync)

+0

是的,我同意JL。亲爱的Partrick,你应该使用条件:e.SocketError == SocketError.Success – norikoSD

相关问题