2013-08-20 31 views
1

我目前正在研究用Java编写的IRC客户端。IRC:无身份响应

只要与服务器的连接建立我发送这些消息:

  • /NICK测试
  • /JOIN #chat

第一次测试就相当好 - 服务器正在响应。但每一次,它说:

  • 注意AUTH:***
  • 检查订货号
  • 注意AUTH:***
  • 没有身份确认
  • 错误:关闭连接... (注册超时)

我发现了一个related question使得h稍微上了一点。它说我需要在端口113上侦听连接,并从IRC-Server接收和响应消息。我实现了一个侦听该端口的ServerSocket,但服务器不尝试在端口113上打开连接。我做错了什么?

继承人的代码:

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class IdentProtocolThread extends Thread { 

private String nick; 
private ServerSocket serverSocket; 
private BufferedReader reader; 
private BufferedWriter writer; 

public IdentProtocolThread(String nick) throws IOException { 
    this.nick = nick; 

    this.serverSocket = new ServerSocket(113); 
} 

@Override 
public void run() { 

    try { 

     System.out.println("waiting for incoming socket"); 
     Socket socket = this.serverSocket.accept(); 

     System.out.println("socket accepted"); 
     this.initialize(socket); 
     System.out.println("reader/writer initialized"); 

     String line = null; 
     while ((line = this.reader.readLine()) != null) { 
      System.out.println(line); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    System.out.println("done"); 
} 

private void initialize(Socket socket) throws IOException { 
    this.reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    this.writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
} 
} 

在执行时我只得到这样显示:

等待传入插座

我需要把一些其他的消息,以避免身份检查?

回答

2

看看this question对底层IRC协议的引用;它的结构比/更为结构化 - 您习惯在客户端看到的命令。握手往往看起来是这样的:

<< USER foo . . :real name 
<< NICK bar 
>> :server PING somethinglonghere 
<< PONG :somethinglonghere 
>> :server 001 bar :Welcome! 
<< JOIN #channel 
>> :[email protected] JOIN #channel 
>> :server 332 bar #channel :channel topic 
>> :server 353 bar = #channel :@someop +somevoice someuser anotheruser 
>> :server 366 bar #channel :End of /NAMES list 

其中<<表示发送到服务器和>>一行文本表示从服务器接收一行文字。还要注意的是,IRC名义上使用\r\n行结尾,尽管许多服务器也会接受\n

+0

我试过你的第一行('USER [email protected]:ytrezq')并得到了':morgan.freenode.net 461 * USER:没有足够的参数' – user2284570

+0

那个“foo”有用户,这些时期实际上是争论。例如,如果我想成为“[email protected]”,那么后面跟着“NICK zaphod”,例如“USER prez。:Zaphod Beeblebrox” –