简体   繁体   English

TCP客户端未连接到IRC地址

[英]TCP Client is not Connecting to IRC Adress

I am trying to build an twitch-chatbot. 我正在尝试建立一个抽动聊天机器人。 I've read some tutorials and this is what I coded so far: 我已经阅读了一些教程,到目前为止,这是我编写的代码:

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();
        }
    }
}

The main problem is the connection part. 主要问题是连接部分。 I don't get far enough to test the rest. 我还远远不够测试其余部分。 The server address and the port should be correct but the program just stops here and nothing happens. 服务器地址和端口应该正确,但是程序只是在这里停止,什么也没有发生。 (I've used the info from this site: http://help.twitch.tv/customer/com/portal/articles/1302780-twitch-irc ) (我已经使用了来自此站点的信息: http : //help.twitch.tv/customer/com/portal/articles/1302780-twitch-irc

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

I hope someone knows the answer for my problem. 我希望有人知道我的问题的答案。

I haven't gotten a chance to test your code, but I have built this class for my Twitch Bot 我还没有机会测试您的代码,但是我已经为Twitch Bot建立了此类

IrcClient.cs : 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();
    }
}

Usage : 用法

// 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");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM