System.Net.Sockets.SocketException (0x80004005)
System.Net.Sockets.SocketException (0x80004005)
我正在用 C# 编写一个用于管理我的 twitch.tv 频道的机器人。
这是循环的基本代码,它由后台工作人员完成以避免 UI 冻结。有 TCPClient(客户端)、StreamReader(读取器)、StreamWriter(写入器)和 NetworkStream(流)。
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 ended" 和 "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”请求(通常每 30 秒一次,可能因服务器实施而异)。您可以在 RFC 2812.
中阅读有关 IRC 客户端协议的更多信息
您说您已经有一个 StreamWriter 和 Reader,您需要做的就是检查该行是否包含“PING”并用“PONG”回复:
if (Data.Contains("PING"))
{
_streamWriter.WriteLine(Data.Replace("PING","PONG");
_streamWriter.Flush();
}
我正在用 C# 编写一个用于管理我的 twitch.tv 频道的机器人。
这是循环的基本代码,它由后台工作人员完成以避免 UI 冻结。有 TCPClient(客户端)、StreamReader(读取器)、StreamWriter(写入器)和 NetworkStream(流)。
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 ended" 和 "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”请求(通常每 30 秒一次,可能因服务器实施而异)。您可以在 RFC 2812.
中阅读有关 IRC 客户端协议的更多信息您说您已经有一个 StreamWriter 和 Reader,您需要做的就是检查该行是否包含“PING”并用“PONG”回复:
if (Data.Contains("PING"))
{
_streamWriter.WriteLine(Data.Replace("PING","PONG");
_streamWriter.Flush();
}