簡體   English   中英

System.Net.Sockets.SocketException(0x80004005)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM