2012-05-23 2 views
2

создать TCP слушатель, используя код ниже:TCP исключение запуска слушателя в C#

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

я начинаю слушать TCP устройства, используя код ниже:

TCPListener.Start(); 

Но здесь, я не управляйте, если порт используется. Когда порт используется, программа дает исключение: «Обычно разрешено только одно использование каждого адреса сокета (протокол/сетевой адрес/порт)».

Как справиться с этим исключением? Я хочу предупредить пользователя о том, что порт используется.

ответ

5

Положите блок try/catch вокруг TCPListener.Start(); и поймайте SocketException. Кроме того, если вы открываете несколько подключений из своей программы, то лучше, если вы будете отслеживать свои соединения в списке и перед открытием соединения, видите ли вы уже открыли соединение.

3

Поймайте его и покажите свое собственное сообщение об ошибке.

Проверьте тип исключения и используйте этот тип в разделе catch.

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

Ну, учитывая, что вы говорите о исключительную ситуацию, просто обрабатывать это исключение с подходящим try/catch блоком, и информировать пользователя о факте.

2

Положить в блок try catch.

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

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

Вы, вероятно, ловить слишком много исключений ... –

2

Используйте блоки try-catch и поймайте SocketException.

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

Не рекомендуется получать исключение проверить, используется ли порт или нет. Используйте объект 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 Хабиб предложил

try 
{ 
    TCPListener.Start(); 
} 
catch(SocketException ex) 
{ 
    ... 
} 
Смежные вопросы