python socket聊天室_用socket做简易聊天室的问题

在Python中创建的socket聊天室存在一个问题:客户端发送的消息无法立即在服务器端显示,只有当服务器发送完消息后,客户端的上一条消息才会显示。客户端和服务器端的代码已给出,问题出现在消息传递的同步上。
摘要由CSDN通过智能技术生成

从服务器向客户端发送消息时没有问题

但是从客户端向服务器发送时不能立即显示 只有在服务器发送完一条才有客户端发送的上一条

客户端:

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值