IRC:无身份响应
我目前正在研究用Java编写的IRC客户端。
一旦建立到服务器的连接,我发送这些消息:
第一次测试进行得非常顺利 - 服务器正在响应。 但每次它说:
我发现一个相关的问题有一点帮助。 它说我需要在端口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()));
}
}
在执行时,我只显示它:
等待传入的套接字
我是否需要发送其他消息以避免身份检查?
看看这个问题,以引用底层的IRC协议; 它比你在客户端看到的/
-commands更具结构化。 握手通常看起来像这样:
<< USER foo . . :real name
<< NICK bar
>> :server PING somethinglonghere
<< PONG :somethinglonghere
>> :server 001 bar :Welcome!
<< JOIN #channel
>> :bar!foo@yourhost 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名义上使用rn
行结尾,尽管一些服务器也会接受n
。