Я пишу бота для модерации моего канала twitch.tv в C#.System.Net.Sockets.SocketException (0x80004005)
Вот базовый код для цикла, который выполняет фоновый рабочий, чтобы избежать зависания пользовательского интерфейса. Там есть TCPClient (Клиент), StreamReader (Reader), StreamWriter (Writer) и NetworkStream (Stream).
private void listener_dowork(object sender, DoWorkEventArgs e)
{
string Data = "";
while ((Data = Reader.ReadLine()) != null)
{
//Perform operations on the received data
}
Console.WriteLine("Loop ended");//this shouldn't happen
}
private void listener_workercompleted(object sender, RunWorkerCompletedEventArgs e)
{
//basically, display a console message that says "OOPS!" and try to reconnect.
}
Получаю сообщение «Loop закончился» и «OOPS!». и в этот момент я получаю исключение (которое я не могу для жизни меня поймать).
Дело в том, что я могу физически отключить сетевой кабель от компьютера, подождите 30 секунд и снова подключите его, и он будет продолжаться нормально.
Полное исключение:
System.Net.Sockets.SocketException (0x80004005): An established connection was aborted by the software in your host machine
at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
Обратите внимание на отсутствие номера строки, которая присутствует во всех других видов исключения я имел, что означает, что я понятия не имею, какая часть программы является вызывая исключение, даже если я поставил каждую возможную строку внутри try/catch.
Я предполагаю, что я ищу, это некоторое понимание того, почему это происходит.
Это происходит всегда каждый раз, когда я запускаю бота и оставляю его в течение нескольких минут на любом канале, хотя количество минут меняется.
Twitch.tv использует IRC в качестве базовой системы , Вы добавили ответы PING? Я думаю, что сервер ударит вас через некоторое время, если вы не ответите на него. – Live
@Live Хм, хорошо, это интересно, я не знал, что сервер сделал это. Как я могу ответить на это? – electroball09
Обычно с ответом PONG. Подробнее читайте в протоколе IRC-клиента в [RFC2812] (https://tools.ietf.org/html/rfc2812#section-3.7.3). – Live