Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IRC Bot无法识别服务器-连接挂起_C#_Irc - Fatal编程技术网

C# IRC Bot无法识别服务器-连接挂起

C# IRC Bot无法识别服务器-连接挂起,c#,irc,C#,Irc,当我尝试使用C#中的简单IRC bot连接到freenode时,我收到以下消息: :asimov.freenode.net注意*:*正在查找主机名 :asimov.freenode.net通知*:*正在检查标识 :asimov.freenode.net注意*:*无法查找您的主机名 :asimov.freenode.net通知*:*无识别响应 然后大约30秒后,程序终止 我已尝试在NICK消息之前发送用户消息,并尝试手动将回车符“\r\n”附加到行尾,而不是在StreamWriter选项中指定它。

当我尝试使用C#中的简单IRC bot连接到freenode时,我收到以下消息:

:asimov.freenode.net注意*:*正在查找主机名

:asimov.freenode.net通知*:*正在检查标识

:asimov.freenode.net注意*:*无法查找您的主机名

:asimov.freenode.net通知*:*无识别响应

然后大约30秒后,程序终止

我已尝试在NICK消息之前发送用户消息,并尝试手动将回车符“\r\n”附加到行尾,而不是在StreamWriter选项中指定它。关于其他可能导致这种行为的因素有什么想法吗

这是我目前的代码:

        socket = new TcpClient(host, port);
        socket.ReceiveBufferSize = 1024;
        Console.WriteLine("Connected");
        NetworkStream stream = socket.GetStream();
        reader = new StreamReader(stream);
        writer = new StreamWriter(stream) { NewLine = "\r\n", AutoFlush = true };
        writer.Write("NICK " + user);
        writer.Write("USER " + user + " 8 * :" + user);
        writer.Write("JOIN " + chan);
        //System.Threading.Thread.Sleep(5000);

        while(running)
        {
            line = reader.ReadLine();
            Console.WriteLine(line);
        }


**已修复-使用.WriteLine将其修复。谢谢

您没有刷新缓冲区。使用writer.Flush();每次写完之后

例如:

writer.Write("NICK {0}\r\n", user);
writer.Flush();


如果你用Wireshark或类似的软件包嗅探到了这一点,你是否看到你的数据实际被发送了?我怀疑它位于某个缓冲区中。我认为您应该使用.WriteLine,而不是。如果希望streamwriter将\r\n附加到每一行并刷新它,请写入。尝试使用
writer.WriteLine
以确保换行符附加在末尾。编辑:忍者被@Ravadre:)@Harpyon:Yey,我变成了1分钟的忍者:-),你需要对ping做出反应。否则你很快就会被踢。我不记得在注册前是否会发生PING。
writer.WriteLine("NICK {0}", user);
writer.Flush(); // Maybe here you will not need to flush because of the autoflush