TCP侦听器在C#中启动异常

时间:2012-05-23 12:10:57

标签: c# .net exception tcplistener

我使用以下代码创建TCP侦听器:

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

我开始使用以下代码监听TCP设备:

TCPListener.Start();

但是在这里,我无法控制端口是否正在使用中。当端口正在使用时,程序会给出一个例外:“通常只允许使用每个套接字地址(协议/网络地址/端口)。”。

我如何处理此异常?我想警告用户该端口正在使用中。

6 个答案:

答案 0 :(得分:5)

TCPListener.Start();周围放置一个try / catch块并捕获SocketException。此外,如果您要从程序中打开多个连接,那么如果您在列表中跟踪连接并打开连接之前,请查看是否已打开连接,这样做会更好

答案 1 :(得分: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.

详情请参阅this

对于处理异常,您将使用try/catch作为habib建议

try
{
  TCPListener.Start();
}
catch(SocketException ex)
{
  ...
}

答案 2 :(得分:3)

抓住它并显示您自己的错误消息。

检查异常类型并在catch子句中使用此类型。

try
{
  TCPListener.Start();
}
catch(SocketException)
{
  // Your handling goes here
}

答案 3 :(得分:2)

将其放入try catch区块。

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

} catch (SocketException e) {
  // Error handling routine
   Console.WriteLine( e.ToString());
 }

答案 4 :(得分:2)

使用try-catch块并捕获SocketException。

try
{
  //Code here
}
catch (SocketException ex)
{
  //Handle exception here
}

答案 5 :(得分:1)

好吧,考虑到您正在讨论例外情况,只需使用合适的try/catch块处理该异常,并告知用户事实。