web-dev-qa-db-ja.com

ポートをリッスンしようとすると、要求されたアドレスはそのコンテキストで無効です

ネットワークを使用してセンサーに接続しようとしていますが、センサーのIPは192.168.2.44ポート3000;

マイコード:

byte[] byteReadStream = null; // holds the data in byte buffer
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.2.44"), 3000);//listen on all local addresses and 8888 port
TcpListener tcpl = new TcpListener(ipe);
while (true)
{
    //infinite loop
    tcpl.Start(); // block application until data and connection
    TcpClient tcpc = tcpl.AcceptTcpClient();
    byteReadStream = new byte[tcpc.Available]; //allocate space
    tcpc.GetStream().Read(byteReadStream, 0, tcpc.Available);
    Console.WriteLine(Encoding.Default.GetString(byteReadStream) + "\n");
}

enter image description here

しかし、このコードを実行すると、このエラーが発生しました:

要求されたアドレスは、そのコンテキストでは無効です

7
Ehsan Akbar

使用する IPAddress.Any聞く。これがあなたの目標のようです:

//listen on all local addresses

指定したリスニングアドレスは、何らかの理由で無効です。数値アドレスを指定する必要はありません。

16
usr

TcpListenerは、ローカルマシン上の特定のポート上のTCPネットワーククライアント)からの接続をリッスンしますつまり、着信接続の場合、コードは一種の「サーバー」として機能します。

要求されたアドレスは、そのコンテキストでは無効です

簡単に言うと、指定されたIPアドレスは、マシン上のどのネットワークインターフェイスでも使用されないことを意味します。

使用する IPAddress.Any任意のIPアドレス(つまり、ネットワークインターフェイス)でリッスンします。

ただし、センサー(ポート3000上)に接続する必要があり、その逆ではない場合があります。

編集:新しい例外は、同じインターフェイス/ポートの組み合わせをリッスンしようとしている2つのアプリケーションがあることを示しています。 2つのインスタンスを同時に実行していますか?

8
Micke