我正在爲我的聊天程序,它允許您註冊(它保存你的對等名稱希望你的名字)一個額外的功能。這個想法是,當有人發送消息時,主機(腳本)首先檢查你是否發送了註冊命令(-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
這是我試圖添加額外功能之前的代碼。乾杯!