Я использовал компонент для создания соединения сокета. Теперь у меня есть клиент и сервер, которые могут подключаться друг к другу компонентом. но моя проблема в том, что: когда произошла какая-то ошибка, я получил сообщение:
System.Net.Sockets.SocketException (0x80004005): No connection could be made because the target machine actively refused it
Я хочу знать, есть ли какая-либо связь между этим кодом (0x80004005) и Winsock Error Codes в MSDN WebSite? что означает этот код? отображается ли код ошибки значения?! или что-то вроде этого?
на самом деле я хочу получить связанное значение, например, 10061
но я не знаю, как я могу получить его с помощью строкового значения. Спасибо за любую помощь.
Свойство ErrorCode объекта исключения содержит код ошибки сокета. Список кодов ошибок определены здесь.
Ошибка в вашем случае: WSAECONNREFUSED 10061
BTW, вы должны поймать SocketException, а не общее исключение, чтобы получить код ошибки.
try
{
}
catch (System.Net.Sockets.SocketException sockEx)
{
int errorCode = sockEx.ErrorCode;
}
Если, однако, вы хотите получить собственный код ошибки, вы можете использовать sockEx.NativeErrorCode
.
Если вы структурируете свой код, чтобы поймать исключение С#, тогда в исключении должен быть текст ошибки.
ПРИМЕР:
try
{
...
}
catch (Exception ex)
MessaageBox.show(ex.toString());
}
В противном случае вы всегда можете PInvoke старого Win32 FormatMessage:
http://bobobobo.wordpress.com/2009/02/02/getting-winsock-error-messages-in-string-format/
И всегда есть sockets.com (из моих 16-разрядных дней программирования WinSock2):