2011-08-04 41 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

相關問題