"没有任何反应"连接到IRC服务器时出错

时间:2014-12-07 23:01:58

标签: python sockets irc

通常我会尝试使用扭曲的库来做这样的事情,但是python 3并不可用 - 所以我尝试使用套接字库。代码确实建立了连接,但服务器快速响应"没有识别响应"。我没有太多的网络编程经验,所以如果有人能指出我在这里犯的错误,我将不胜感激。我也非常清楚,有些功能/其他代码没有被使用,或者我使用不一致。我只是想我会在这里粘贴我的全部代码,以防相关。

import socket

server = "irc.freenode.net"
channel = "put channel here"
nickname = "put nickname here"


def encode(text):
    return text.encode("ascii")


def ping():
    irc_socket.send(encode("PONG :pingis\n"))


def send_message(chan, msg):
    irc_socket.send(encode("PRIVMSG " + chan + " :" + msg + "\n"))


def join_channel(chan):
    irc_socket.send(encode("JOIN " + chan + "\n"))

def login(username='user', realname='Pythonist', hostname='Helena', servername='Server'):
    irc_socket.send(encode("USER %s %s %s %s" % (username, hostname, servername, realname)))
    irc_socket.send(encode("NICK " + nickname))


irc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
irc_socket.connect((server, 6667))
login()
join_channel(channel)

while True:
    buffer = irc_socket.recv(1024)
    msg = str.split(str(buffer))
    if msg[0] == "PING":
        irc_socket.send("PONG %s" % msg[1])
    print(msg)

代码最初来自:http://wiki.shellium.org/w/Writing_an_IRC_bot_in_Python,我做了一些小改动。

2 个答案:

答案 0 :(得分:3)

Ident是UNIX服务,没有人使用二十年左右。

在终端应用程序中将终端服务器连接到远程服务器连接时,它用于标识远程用户。对于现代互联网来说,Ident是不安全的,所以没有人再使用它了。

所以你已经击中了过去的幽灵。另外,如上面的答案中所述,如果您发送了正确的NICK命令,则IRC服务器会对您的客户感到满意。

答案 1 :(得分:3)

Teensy微小的小问题造成了所有麻烦:你在login中缺少新行。 "USER %s %s %s %s"应为"USER %s %s %s %s\n""NICK " + nickname应为"NICK " + nickname + "\n"。服务器查找你的身份并找不到它,然后下一步是你注册,但是你永远不会发送完整的一行,所以它一直在等待...等待......