2015-07-02 121 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命名。你的意思是枚舉(行)?

相關問題