python3 如何实现实时聊天功能
小白请教python3聊天室功能实现
代码来源:http://blog.csdn.net/calling_wisdom/article/details/42524745
用pycharm测试时候发现,Client那边,A输入一行字,B不能马上收到。需要B先打东西,然后才能收到A的信息。与此同时,A才能收到。
跪求大神解答。好像是threading的问题,还是说pycharm的问题?
Server:
##Client
代码来源:http://blog.csdn.net/calling_wisdom/article/details/42524745
用pycharm测试时候发现,Client那边,A输入一行字,B不能马上收到。需要B先打东西,然后才能收到A的信息。与此同时,A才能收到。
跪求大神解答。好像是threading的问题,还是说pycharm的问题?
Server:
#!/usr/bin/python3
#coding=utf-8
from socket import *
from threading import Thread
HOST='localhost'
PORT=5550
BUFSIZE=1024
ADDR=(HOST,PORT)
Sock = socket(AF_INET,SOCK_STREAM)
Sock.bind(ADDR)
Sock.listen(5)
print("Server 127.0.0.1 listening...")
mydict=dict()
mylist=list()
##whatToSay send to all exceptNum
def tellOthers(mynum,whatToSay):
for c in mylist:
if c.fileno() != mynum:
try:
c.send(whatToSay.encode())
except:
pass
def subThreadIn(myconnection,connNumber):
nickname = myconnection.recv(BUFSIZE).decode()
mydict[myconnection.fileno()]=nickname
mylist.append(myconnection)
print('Connection',connNumber,'has nickname:',nickname)
while True:
try:
recveMsg=myconnection.recv(BUFSIZE).decode()
if not recveMsg:
pass
else:
print(mydict[connNumber],':',recveMsg)
tellOthers(connNumber,mydict[connNumber]+':'+recveMsg)
except(OSError,ConnectionResetError):
try:
mylist.remove(myconnection)
except:
pass
print(mydict[connNumber],'exit,',len(mylist),'person left')
tellOthers(connNumber,'[Remind:'+mydict[connNumber]+' has left the chatting room]')
myconnection.close()
return
while True:
connection,addr=Sock.accept()
print('Accept a new connection',ADDR,connection.fileno())
try:
buf = connection.recv(BUFSIZE).decode()
if buf == '1':
connection.send(b'Welcome to server!') ##Client端显示
mythread = Thread(target=subThreadIn,args=(connection,connection.fileno()))
mythread.setDaemon(True)
mythread.start()
else:
connection.send(b'please go out!')
connection.close()
except:
pass
##Client
from socket import *
from threading import Thread
HOST='localhost'
PORT=5550
BUFSIZE=1024
ADDR=(HOST,PORT)
Sock=socket(AF_INET,SOCK_STREAM)
Sock.connect(ADDR)
Sock.send(b'1')
print(Sock.recv(BUFSIZE).decode())
nickname=input("input your nickname:")
Sock.send(nickname.encode())
def sendThreadFunc():
while True:
try:
myword=input(">>>")
myword=myword.encode('utf-8')
print(Sock.recv(BUFSIZE).decode()) ##这里先后顺序并没有差别的。
Sock.send(myword)
except ConnectionAbortedError:
print('Warning! The connection is aborted!')
except ConnectionResetError:
print("Warning! The connection is reset!")
def recvThreadFunc():
while True:
try:
otherword=Sock.recv(BUFSIZE)
if otherword:
print(otherword.decode())
else:
pass
except ConnectionResetError:
print("Warning! The connection is reset!")
except ConnectionAbortedError:
print("Warning! The connection is aborted!")
send1=Thread(target=sendThreadFunc)
recv1=Thread(target=recvThreadFunc)
threads=[send1,recv1]
for t in threads:
t.setDaemon(True)
t.start()
t.join()
...全文
相关推荐
HTML实时在线聊天室
使用python3+flask+websocket-server实现在线实时聊天室。系统采用前后端分离试设计,服务端程序以打包成EXE文件
使用Django 3.1.5创建实时聊天系统实战指南
本文还有配套的精品资源,点击获取 简介:本项目利用Python和Django 3.1.5框架,构建了一个具有实时聊天功能的Web应用程序。Django,作为遵循MVC设计模式的开源Web框架,简化了复杂任务如身份验证、会话管理和数据库交互的处理。聊天应用的开发考虑了Django 3.1.5的新特性和改进,以确保最佳性能和兼容性。项目文件结构清晰,包含必要的命令行入口、依赖管...
python socket两个客户端相互聊天 聊天室功能
python+socket,两个客户端,一个服务器,服务器实现转发功能,两个客户端聊天。发送规则“ @(+昵称+)@(+内容)” 。
Python实现聊天机器人的示例代码
主要介绍了Python实现聊天机器人,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
python-pubnub-chat:使用pubnub python和javascript sdk,flask和mongodb构建的实时聊天应用程序
python-pubnub-chat



