2015-07-02 78 views
2

我正在为我的聊天程序,它允许您注册(它保存你的对等名称希望你的名字)一个额外的功能。这个想法是,当有人发送消息时,主机(脚本)首先检查你是否发送了注册命令(-set -name)。如果您要求您输入希望的用户名并将其保存在带有您的对等名(例如57883:插孔)的.txt(names.txt)文件中,然后将消息发送给57883已将其名称更改为插孔的其他客户端。客户端断开连接时,他发送消息python

如果您还没有发送命令,主机(脚本)会检查您是否通过查看names.txt文件中的对等名来注册,当它找到它时,它将获得名称“:”和与消息给其他客户一起发送一个(好像是这样:你好小伙子们,你们过得好上来的)

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 

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

回答

0

我可能是错的,但没有行:在主机上

name = raw_input('name: ') 

工作,打印“名称:”和预期用户输入一个线路输入的控制台上?当用户输入并按下输入时,不会发生任何其他事情。

此外,该行:

   for i, peer in enumerate(f): 

是F的范围吗?看起来你期待它返回一个整数和一个套接字。 f的唯一其他可见用途是在文件open/close中为-set和--name命名。你的意思是枚举(行)?

相关问题