用socket做简易聊天室的问题
从服务器向客户端发送消息时没有问题
但是从客户端向服务器发送时不能立即显示 只有在服务器发送完一条才有客户端发送的上一条
客户端:
import socket
import threading
def talk(s):
while True:
data=input()
s.send(data.encode('utf-8'))
if data=='exit':
break
s.close()
def receive(s):
while True:
data=s.recv(1024)
if not data or data.decode('utf-8') == 'exit':
break
print(data.decode('utf-8'))
s.close()
print('886')
if name == '__main__':
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1',8999))
print(s.recv(1024).decode('utf-8'))
r=threading.Thread(target=receive,args=(s,))
t=threading.Thread(target=talk,args=(s,))
t.start()
r.start()
服务器:
import socket
import threading
def receive(s,addr):
while True:
data=s.recv(1024)
if not data or data.decode('utf-8') == 'exit':
break
print(data.decode('utf-8'))
s.close()
print('886 %s %s'%addr)
def talk(s):
while True:
data=input()
s.send(data.encode('utf-8'))
if data=='exit':
break
s.close()
if __name__=='__main__':
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',8999))
s.listen(5)
print('waiting for connection...')
while True:
sock,addr=s.accept()
print('找到一个新的连接:%s:%s'%addr)
sock.send(b'hello ')
t=threading.Thread(target=talk,args=(sock,))
r=threading.Thread(target=receive,args=(sock,addr))
r.start()
t.start()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只有在服务器发送完一条才有客户端发送的上一条 这句话无法理解
兄弟, 你这代码在于 它在不停地创建线程, 这个应该剔到外面
官方教程:
这下面的client 改成循环就发送行了