2011-08-04 24 views
2

ポリシーファイルサーバーが起動しています。しばらくの間、ポリシーファイルが正しく設定されていないため、AccessDeniedを取得していました。今私はもはやそのエラーを受け取っていないので、それは問題ではないことは分かっています。任意のアドレスからのクライアント接続を受け入れるという簡単なループを実行するシンプルなサーバーがあります。私はシンプルなクライアントも書いていたので、サーバが動作することは分かっています。 Silverlightではargsを設定してConnectAsyncを呼び出します。これはローカルホスト上でimmedately(意味をなさなく)に戻り、LastOperationがConnectでSocketErrorが成功したというイベント引数をチェックすると成功します。しかし、ソケットをチェックすると、まったく接続されません。何か案は..?これ以上数時間壁に頭を当てていた。Silverlight 4ソケットConnectAsyncは成功を返しますが、ソケットは接続されていません。

私が試した他のいくつかの事柄。私はローカルボックスから別のサーバーにサーバーを移動しました。まだ動作しませんでした。私はパケットキャプチャを行い、それがポーリシーファイルを受信して​​いることに気づいたが、その後、他のサーバに接続しようとするためにブラウザが送信したパケットはない。

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

私はあなたがまた(のみSilverlightで)e.ConnectSocketを使用することができ、あなたがe.SocketErrorを使うべきだと思うと、いないe.LastOperation

また、「ない」は、この中を追加する必要があります条件:if(!completedSync)

+0

はい、私はJLに同意します。親愛なるPartrickさん、あなたは条件を使うべきです:e.SocketError == SocketError.Success – norikoSD

関連する問題