2015-12-27 74 views
3

所以,我一直在試圖製作一個連接到本地irc服務器的bot。問題是,如果我使用如下構造函數調用「Irc.cs」類:Irc irc = new Irc("192.168.1.2", 6667); irc.joinChannel("#test")它不顯示在irc服務器通道上。事情是我不認爲它連接失敗,因爲如果我把Irc irc = new Irc("192.168.1.11", 6667)(這不是服務器)它會引發異常,但是一個服務器不會。我希望如果有人可以幫助:)這是「Irc.cs」代碼(C#)TcpClient不連接到irc服務器(使用數字ip)

 public IrcBot(String ip, int port, String nickName) 
    { 

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

     outputStream.WriteLine("NICK " + nickName); 
     outputStream.WriteLine("USER " + nickName + " 8 * : " + nickName); 
     outputStream.Flush(); 
    } 

     public void joinRoom(String channel) 
    { 
     this.channel = channel; 

     outputStream.WriteLine("JOIN " + channel); 
     outputStream.Flush(); 
    } 
+0

PS:端口6667已打開。我可以使用mIRC連接到我的普通PC上的irc服務器(託管在虛擬機上) – Nick

+0

只是瘋狂的猜測,但也許你發送連接命令太快了。我知道連接到IRC服務器需要一些時間。現在你不必等待任何迴應。除此之外,我建議關閉和處理流(例如使用) –

+0

@RonDeijkers好吧,那麼如何通過讀取輸入流來檢查我是否得到響應 – Nick

回答

1

這裏的一個重要的事情是IRC使用CR/LF代替LF是StreamWriters用,所以你需要創建StreamWriter像這樣:

writer = new StreamWriter(stream) { NewLine = "\r\n" }; 

這樣它會在每行的末尾發送CR/LF。

+0

好的。它仍然沒有在頻道中顯示爲機器人。 – Nick

+0

現在它說工作... ':irc.test.com通知*:***查找您的主機名... :irc.test.com通知*:***無法解析您的主機名;使用您的IP地址代替 PING:B6598BF5' ThisIsANames是我設置的暱稱 錯誤:關閉鏈接:ThisIsANames [192.168.1.5](註冊超時) – Nick

+0

謝謝大家! :) – Nick