TCP客户端未连接到IRC地址

问题描述:

我正在尝试构建一个twitch-chatbot。我已经阅读了一些教程,这是我编码到目前为止:TCP客户端未连接到IRC地址

namespace IRC_Client 
{ 
    class Program 
    { 
     public NetworkStream NetStream = null; 
     public StreamReader StreamRead = null; 
     public StreamWriter StreamWrite = null; 

     public System.Net.Sockets.TcpClient Socket_TcpClient; 

     static void Main(string[] args) 
     { 
      Program P = new Program(); 
      P.IRC_Connect(); 

      Console.Read(); 
     } 

     public void IRC_Connect() 
     { 
      int port; 
      string nick, owner, server, oauth; 

      nick = "xxx"; 
      Console.WriteLine("Bot Name: {0}", nick); 
      oauth = "oauth:xxxxxxxxxxxxxxxxxxx"; 
      Console.WriteLine("Password Token: {0}", oauth); 
      owner = "xxx"; 
      Console.WriteLine("Bot owner name: {0}", owner); 
      server = "irc.twitch.tv"; 
      Console.WriteLine("Server name: {0}", server);     
      port = 6667; 
      Console.WriteLine("Portnummber: {0} ", port); 

      try 
      { 
       Socket_TcpClient = new TcpClient(server, port); 
      } 
      catch 
      { 
       Console.WriteLine("Failed to connect!"); 
       return; 
      } 

      Console.WriteLine("Connected"); 

      IRCWork(); 

      try 
      { 
       NetStream = Socket_TcpClient.GetStream(); 
       StreamRead = new StreamReader(NetStream); 
       StreamWrite = new StreamWriter(NetStream); 
       SendData("PASS", oauth); 
       SendData("NICK", nick); 
      } 
      catch 
      { 
       Console.WriteLine("Communication error"); 
       throw; 
      } 
     } 

     public void SendData(string cmd, string param) 
     { 
      if (param == null) 
      { 
       StreamWrite.WriteLine(cmd); 
       StreamWrite.Flush(); 
       Console.WriteLine(cmd); 
      } 
      else 
      { 
       StreamWrite.WriteLine(cmd + " " + param); 
       StreamWrite.Flush(); 
       Console.WriteLine(cmd + " " + param); 
      } 
     } 

     public void IRCWork() 
     { 
      string[] Text; 
      string data; 
      bool shouldRun = true; 
      while (shouldRun) 
      { 
       data = StreamRead.ReadLine(); 
       Console.WriteLine(data); 
       char[] charSeparator = new char[] { ' ' }; 
       Text = data.Split(charSeparator, 5); 

       if (Text[0] == "PING") 
       { 
        SendData("PONG", Text[1]); 
       } 

       if (Text.Length > 4) //is the command received long enough to be a bot command? 
       { 
        string command = Text[3]; //grab the command sent 

        switch (command) 
        { 
         case ":!join": 
          SendData("JOIN", Text[4]); 
          //if the command is !join send the "JOIN" command to the server with the parameters set by the user 
          break; 
         case ":!say": 
          SendData("PRIVMSG", Text[2] + " " + Text[4]); 
          //if the command is !say, send a message to the chan (ex[2]) followed by the actual message (ex[4]). 
          break; 
         case ":!quit": 
          SendData("QUIT", Text[4]); 
          //if the command is quit, send the QUIT command to the server with a quit message 
          shouldRun = false; 
          //turn shouldRun to false - the server will stop sending us data so trying to read it will not work and result in an error. This stops the loop from running and we will close off the connections properly 
          break; 
        } 
       } 
      } 
     } 

     public void Dispose() 
     { 
      if (StreamRead != null) 
       StreamRead.Close(); 
      if (StreamWrite != null) 
       StreamWrite.Close(); 
      if (NetStream!= null) 
       NetStream.Close(); 
      if (Socket_TcpClient != null) 
       Socket_TcpClient.Close(); 
     } 
    } 
} 

主要问题是连接部分。我没有足够的时间来测试其余的。服务器地址和端口应该是正确的,但程序只停在这里,没有任何反应。 (我使用本网站的信息:http://help.twitch.tv/customer/com/portal/articles/1302780-twitch-irc

try 
{ 
    Socket_TcpClient = new TcpClient(server, port); 
} 

我希望有人知道我的问题的答案。

+0

任何异常或程序只是停止? – Sybren

+0

好吧,我很不耐烦。几分钟后它会抛出超时异常。但服务器和端口仍然是正确的。 –

+0

您能否将异常消息添加到您的问题中? – Sybren

我没有得到一个机会来测试你的代码,但我已经建立了这个类我抽搐博特

IrcClient.cs

class IrcClient 
{ 
    public string userName; 
    private string channel; 

    private TcpClient tcpClient; 
    private StreamReader inputStream; 
    private StreamWriter outputStream; 

    public IrcClient(string ip, int port, string userName, string password) 
    { 
     this.userName = userName; 

     tcpClient = new TcpClient(ip, port); 
     inputStream = new StreamReader(tcpClient.GetStream()); 
     outputStream = new StreamWriter(tcpClient.GetStream()); 

     outputStream.WriteLine("PASS " + password); 
     outputStream.WriteLine("NICK " + userName); 
     outputStream.WriteLine("USER " + userName + " 8 * :" + userName); 
     outputStream.Flush(); 
    } 

    public void joinRoom(string channel) 
    { 
     this.channel = channel; 
     outputStream.WriteLine("JOIN #" + channel); 
     outputStream.Flush(); 
    } 
} 

使用

// Password from www.twitchapps.com/tmi/ 
// include the "oauth:" portion 
/* main server: irc.twitch.tv, 6667 */ 
string oauth = "oauth:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
irc = new IrcClient("irc.twitch.tv", 6667, "BOT_NAME", oauth); 
irc.joinRoom("CHANNEL_NAME");