1

ソケットがあり、クライアントからサーバーに情報を送信しようとしています。両方とも同じネットワーク上にあり、LAN IPは異なります(次のように)。

私のサーバーは私のC#アプリケーションです。--192.168.0.2私のクライアントは私のAndroidアプリケーションです。-192.168.0.7

これが私TcpListenerのサーバーです:

server = new TcpListener(IPAddress.Parse("192.168.0.7"), 7079);

クライアントでの接続は次のとおりです。

Socket conn = new Socket("192.168.0.2", 7079);

まず、TcpListenerIPとして何を入れるべきかわかりませんでした。明らかに、私が持っているものは間違っています。なぜなら、それは:をスローするからSocketExceptionですThe requested address is not valid in its context

編集:

最初の問題は解決されました。エミュレータを使用して実行10.0.2.2し、接続IPを設定しました。現在、C#は例外をスローしています。周囲のコードは次のとおりです。

浸出を防ぐために完全なコードが削除されました

で始まる行でwhileObjectDisposedExceptionNetworkStreamが破棄されたというメッセージが表示されます。何か助けはありますか?

4

2 に答える 2

1

Androidエミュレーターを使用している場合は、IPアドレスに注意する必要があります。

これに関連する別のStackOverflowの回答からMatthiasの回答を引用します(ここにあります:AndroidエミュレーターのIPアドレスを取得する方法は?

アプリ内から、エミュレーターを「localhost」または127.0.0.1と呼ぶことができます。

Webトラフィックは開発マシンを介してルーティングされるため、エミュレーターの外部IPは、プロバイダーによってそのマシンに割り当てられたIPです。開発マシンには、10.0.2.2のデバイスからいつでもアクセスできます。

開発マシンがサーバーを実行していると仮定して、10.0.2.2 IPアドレスを使用するようにコードを変更すると、問題が解決される可能性が高くなります。

于 2012-07-20T19:20:26.697 に答える
1

のIPアドレスを入力しないでくださいTCP Listener。クライアントが接続に使用するIPアドレスは、コンピューターのIPアドレスにすぎません。Socketクライアントのみが接続先のIPアドレスを追加する必要があります。

TCPListener編集:つまり、それ自体を指しているため、「127.0.0.1」を使用する必要があります。次に、AcceptTcpClientメソッドを使用してクライアントを受け入れます。

例を見つけましたhttp://theanti9.wordpress.com/2008/02/13/c-tcplistener-example/

別の編集:申し訳ありませんがIPAddress.Any、リスナーのIPアドレス用ですか?私のC#は期待どおりに錆びていますが、この2つのうちの1つである必要があります。

別の編集:最新のコード編集を確認した後client.Close()、リスニングループを呼び出しています。これにより、クライアントは接続を閉じ、作成したオブジェクトをSocket無効にします。ストリームがもう存在しないため、エラーが発生Streamするのはそのためです。ObjectDisposed

于 2012-07-20T19:43:42.907 に答える