我正在为我的聊天程序,它允许您注册(它保存你的对等名称希望你的名字)一个额外的功能。这个想法是,当有人发送消息时,主机(脚本)首先检查你是否发送了注册命令(-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
这是我试图添加额外功能之前的代码。干杯!