2

以下のコードを使用して TCP リスナーを作成します。

TCPListener = new TcpListener(IPAddress.Any, 1234);

以下のコードを使用して、TCP デバイスのリッスンを開始します。

TCPListener.Start();

ただし、ここでは、ポートが使用中かどうかを制御しません。ポートが使用中の場合、プログラムは「通常、各ソケット アドレス (プロトコル/ネットワーク アドレス/ポート) の 1 つの使用のみが許可されます。」という例外を返します。

この例外を処理するにはどうすればよいですか? ポートが使用中であることをユーザーに警告したい。

4

6 に答える 6

5

try/catch ブロックを 配置してTCPListener.Start();、SocketException をキャッチします。また、プログラムから複数の接続を開いている場合は、リストで接続を追跡し、接続を開く前に、既に接続が開いているかどうかを確認することをお勧めします

于 2012-05-23T12:14:54.470 に答える
4

ポートが使用中かどうかを確認するために例外を取得することはお勧めできません。オブジェクトを使用してIPGlobalPropertiesオブジェクトの配列を取得し、TcpConnectionInformationエンドポイントの IP とポートについて問い合わせることができます。

 int port = 1234; //<--- This is your value
 bool isAvailable = true;

 // Evaluate current system tcp connections. This is the same information provided
 // by the netstat command line application, just in .Net strongly-typed object
 // form.  We will look through the list, and if our port we would like to use
 // in our TcpClient is occupied, we will set isAvailable to false.
 IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
 TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();

 foreach (TcpConnectionInformation tcpi in tcpConnInfoArray)
 {
   if (tcpi.LocalEndPoint.Port==port)
   {
     isAvailable = false;
     break;
   }
 }

 // At this point, if isAvailable is true, we can proceed accordingly.

詳しくはこちらをお読みください

例外を処理するにはtry/catch、ハビブが提案したように使用します

try
{
  TCPListener.Start();
}
catch(SocketException ex)
{
  ...
}
于 2012-05-23T12:20:36.217 に答える
3

それをキャッチして、独自のエラー メッセージを表示します。

例外のタイプを確認し、このタイプを catch 句で使用してください。

try
{
  TCPListener.Start();
}
catch(SocketException)
{
  // Your handling goes here
}
于 2012-05-23T12:13:14.897 に答える
2

ブロックに入れtry catchます。

try {
   TCPListener = new TcpListener(IPAddress.Any, 1234);
   TCPListener.Start();

} catch (SocketException e) {
  // Error handling routine
   Console.WriteLine( e.ToString());
 }
于 2012-05-23T12:13:47.330 に答える
2

try-catch ブロックを使用して、SocketException をキャッチします。

try
{
  //Code here
}
catch (SocketException ex)
{
  //Handle exception here
}
于 2012-05-23T12:14:00.310 に答える
1

例外的な状況について話していることを考えると、その例外を適切なtry/catchブロックで処理し、事実についてユーザーに通知してください。

于 2012-05-23T12:13:23.633 に答える