IRC:无身份响应

我目前正在研究用Java编写的IRC客户端。

一旦建立到服务器的连接,我发送这些消息:

  • / NICK测试
  • / JOIN#聊天
  • 第一次测试进行得非常顺利 - 服务器正在响应。 但每次它说:

  • 注意事项:***
  • 检查标识
  • 注意事项:***
  • 没有标识响应
  • 错误:关闭链接...(注册超时)
  • 我发现一个相关的问题有一点帮助。 它说我需要在端口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

    链接地址: http://www.djcxy.com/p/53463.html

    上一篇: IRC: No Ident response

    下一篇: Reading from multiple sockets (irc bot)