0

TCP/IP 経由で WP8 から IP/ポートに接続しようとしています。socket.ConnectAsync() を使用して接続を開始し、このような完了イベントを指定します

        socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
        {
            lasterrorstring = e.SocketError.ToString();
            if (e.SocketError != SocketError.Success)
            {
                 :
            }
        });

すべてが機能します。だから私は他のホストと正しく話すことができます。しかし、エラーケースは私を悩ませます。何らかの理由で、e.SocketError は常に Success を返します。存在しないIPに接続しようとさえしました。成功も報告します。その後の Send() でさえ、成功を報告します。ここで何が問題なのですか?

完全を期すために、ここに私の接続設定コード全体を示します

        Socket _socket = null;

        DnsEndPoint hostEntry = new DnsEndPoint(hostName, portNumber);

        // Create a stream-based, TCP socket using the InterNetwork Address Family. 
        _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // Create a SocketAsyncEventArgs object to be used in the connection request
        SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
        socketEventArg.RemoteEndPoint = hostEntry;

        // Inline event handler for the Completed event.
        // Note: This event handler was implemented inline in order to make this method self-contained.
        socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
        {
            // Retrieve the result of this request
            lasterrorstring = e.SocketError.ToString();
            if (e.SocketError != SocketError.Success)
            {
                res = 1;
            }
        });

        // Make an asynchronous Connect request over the socket
        _socket.ConnectAsync(socketEventArg);
4

1 に答える 1

0

これは古い質問ですが、とにかく。それは私にも起こり、 SendAsync メソッドで何かを送信するまで、接続されていると見なされるようです。しかし、SendAsync の Completed イベントでは、e.SocketError は成功を返しません。したがって、ConnectAsync が成功を返した直後に空のデータを送信して、実際に接続されているかどうかを確認できます。

于 2014-05-24T20:51:16.017 に答える