[英]System.Net.Sockets.SocketException (0x80004005): No such host is known
[英]System.Net.Sockets.SocketException (0x80004005)
我正在編寫一個用於在C#中審核我的twitch.tv頻道的機器人。
這是循環的基本代碼,由后台工作人員完成,以避免UI凍結。 有一個TCPClient(客戶端),StreamReader(閱讀器),StreamWriter(書寫器)和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.
}
我收到消息“循環結束”和“糟糕!”。 到那時,我得到了例外(我一生都無法捕捉到)。
問題是,我可以從計算機上物理拔下網絡電纜,等待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)
請注意,缺少行號,這在我遇到的所有其他種類的異常中都存在,這意味着即使我將所有可能的行都放入了嘗試中,我也不知道程序的哪一部分導致了異常/抓住。
我想我正在尋找的是對為什么發生這種情況的一些見解。
每當我啟動漫游器並使它在任何頻道上運行幾分鍾時,它都會發生,盡管分鍾數會有所不同。
正如我在評論中已經說過的那樣,Twitch.tv使用IRC作為其聊天的底層系統。 為了保持與服務器的連接,您需要回復服務器頻繁發送的“ PING”請求(通常每30秒一次,可能會因服務器的實現而異)。 您可以在RFC 2812中閱讀有關IRC客戶端協議的更多信息。
您說您已經有了一個StreamWriter和Reader,您需要做的就是檢查該行是否包含“ PING”,然后回復一個“ PONG”:
if (Data.Contains("PING"))
{
_streamWriter.WriteLine(Data.Replace("PING","PONG");
_streamWriter.Flush();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.