【问题标题】:IRC: No Ident responseIRC:没有 Ident 响应
【发布时间】:2013-08-20 17:27:05
【问题描述】:

我目前正在开发一个用 Java 编写的 IRC 客户端。

一旦与服务器建立连接,我就会发送这些消息:

  • /NICK 测试
  • /加入#chat

第一次测试非常顺利 - 服务器正在响应。但每次都说:

  • 注意授权:***
  • 检查身份
  • 注意授权:***
  • 没有 Ident 响应
  • 错误:正在关闭链接...(注册超时)

我找到了一个related question,它有点帮助。它说我需要在端口 113 上侦听连接以及从 IRC 服务器接收和响应的消息。我实现了一个侦听该端口的 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()));
}
}

在执行时我只显示这个:

等待传入的套接字

我是否需要发送一些其他消息以避免身份检查?

【问题讨论】:

    标签: java client chat irc


    【解决方案1】:

    查看this question 以获取对底层 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
    

    其中&lt;&lt; 表示发送到服务器的一行文本,&gt;&gt; 表示从服务器接收的一行文本。另请注意,IRC 名义上使用\r\n 行尾,尽管许多服务器也会接受\n

    【讨论】:

    • 我已经尝试了你的第一行(USER ytrezq@myopera.com :ytrezq)并得到了:morgan.freenode.net 461 * USER :Not enough parameters
    • 那里的“foo”是用户,句点实际上是参数。例如,如果我想成为“zaphod!prez@heartofgold.space”,则“USER prez . . :Zaphod Beeblebrox”后跟“NICK zaphod”
    猜你喜欢
    • 2016-10-04
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2011-10-07
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多