客户端在发送消息python时断开连接

时间:2015-07-02 16:21:37

标签: python chat

我正在为我的聊天程序创建一个额外的功能,允许您注册(它将您希望的姓名与您的同名保存)。这个想法是当有人发送消息时,主机(脚本)首先检查你是否发送了注册命令(-set --name)。如果您要求您提供所需的用户名并将其保存在带有您的对等名称的.txt(names.txt)文件中(例如57883:jack),然后向其他客户发送一条消息,表明57883已将其姓名更改为jack

如果你还没有发送命令,主机(脚本)会通过在names.txt文件中查找你的peername来检查你是否注册了,当它找到它时,它会得到' :'并将其与消息一起发送给其他客户(如下:你好小伙子们,你们怎么做?)

else:
   try:
       data = sock.recv(RECV_BUFFER)
       if data:
           for o,a in data:
               if o in ("-set", "--name"):
                   name = raw_input('name: ')
                   peer2 = sock.getpeername()
                   with open('names.txt', 'a') as f:
                       f.write(name + ':' + peer2)
                       f.write('\n')
                       f.close()
                   broadcast_data(sock,'set name to: ' + name)
               else:
                   peer = sock.getpeername()
                   with open('names.txt', 'r') as d:
                       lines = d.readlines()
                       for i, peer in enumerate(f):
                           numb, name = peer.rstrip(":")
                           print i, numb, name
                   broadcast_data(sock,'<' + name + '> ' + data)
   except:
       broadcast_data(sock, "Client (%s, %s) is offline" % addr)
       print "Client (%s, %s) is offline" % addr
       sock.close()
       CONNECTION_LIST.remove(sock)
       continue

这是我到目前为止,但它不起作用..客户端与主机精确连接,但当客户端发送消息时,他断开连接。为什么他没有尝试?

else:
   try:
       data = sock.recv(RECV_BUFFER)
       if data:
           broadcast_data(sock,'<' + str(sock.getpeername()) + '> ' + data)
   except:
       broadcast_data(sock, "Client (%s, %s) is offline" % addr)
       print "Client (%s, %s) is offline" % addr
       sock.close()
       CONNECTION_LIST.remove(sock)
       continue

这是我尝试添加额外功能之前的代码。干杯!

1 个答案:

答案 0 :(得分:0)

我可能错了,但不行:

name = raw_input('name: ')

在主机上工作,打印“name:”并期望用户在控制台上输入一行输入?当用户键入并按下回车键时,不会发生任何其他事情。

另外,该行:

               for i, peer in enumerate(f):

这里的范围是?看来你期望它返回一个整数和一个套接字。 f的唯一其他可见用途是在文件打开/关闭-set和--name。你的意思是枚举(行)?