Python socket聊天室程序
来源:互联网 发布:eva新剧场版知乎 编辑:程序博客网 时间:2024/06/05 15:43
今天用python的socket模块实现了一个聊天室的程序
虽然功能比较简单,但是该有的基本功能还是有的
还望大家指点
服务器端程序:
import socketimport threadingsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('localhost', 5550))sock.listen(5)print('Server', socket.gethostbyname('localhost'), 'listening ...')mydict = dict()mylist = list()#把whatToSay传给除了exceptNum的所有人def tellOthers(exceptNum, whatToSay): for c in mylist: if c.fileno() != exceptNum : try: c.send(whatToSay.encode()) except: passdef subThreadIn(myconnection, connNumber): nickname = myconnection.recv(1024).decode() mydict[myconnection.fileno()] = nickname mylist.append(myconnection) print('connection', connNumber, ' has nickname :', nickname) tellOthers(connNumber, '【系统提示:'+mydict[connNumber]+' 进入聊天室】') while True: try: recvedMsg = myconnection.recv(1024).decode() if recvedMsg: print(mydict[connNumber], ':', recvedMsg) tellOthers(connNumber, mydict[connNumber]+' :'+recvedMsg) except (OSError, ConnectionResetError): try: mylist.remove(myconnection) except: pass print(mydict[connNumber], 'exit, ', len(mylist), ' person left') tellOthers(connNumber, '【系统提示:'+mydict[connNumber]+' 离开聊天室】') myconnection.close() returnwhile True: connection, addr = sock.accept() print('Accept a new connection', connection.getsockname(), connection.fileno()) try: #connection.settimeout(5) buf = connection.recv(1024).decode() if buf == '1': connection.send(b'welcome to server!') #为当前连接开辟一个新的线程 mythread = threading.Thread(target=subThreadIn, args=(connection, connection.fileno())) mythread.setDaemon(True) mythread.start() else: connection.send(b'please go out!') connection.close() except : pass
客户端程序:
import socketimport timeimport threadingsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.connect(('localhost', 5550))sock.send(b'1')print(sock.recv(1024).decode())nickName = input('input your nickname: ')sock.send(nickName.encode())def sendThreadFunc(): while True: try: myword = input() sock.send(myword.encode()) #print(sock.recv(1024).decode()) except ConnectionAbortedError: print('Server closed this connection!') except ConnectionResetError: print('Server is closed!') def recvThreadFunc(): while True: try: otherword = sock.recv(1024) if otherword: print(otherword.decode()) else: pass except ConnectionAbortedError: print('Server closed this connection!') except ConnectionResetError: print('Server is closed!')th1 = threading.Thread(target=sendThreadFunc)th2 = threading.Thread(target=recvThreadFunc)threads = [th1, th2]for t in threads : t.setDaemon(True) t.start()t.join()
代码执行效果图:
聊天过程1:
系统监视:
聊天过程 2 :
系统监视:
0 0
- Python socket聊天室程序
- Python socket聊天室程序
- Python Socket 编程:聊天室示例程序
- Python学习笔记(八) -- Python Socket 编程 - 聊天室示例程序
- Python Socket 编程——聊天室示例程序
- Python Socket 编程——聊天室示例程序
- Python聊天室程序---基础
- Python聊天室程序----界面设计
- Python聊天室程序-----美化
- Java简易聊天室程序socket
- python socket 多人聊天室
- python socket多人聊天室
- Python编写基于socket的非阻塞多人聊天室程序(单线程&多线程)
- 基于Socket 的 Silverlight 聊天室程序
- java简单Socket聊天室程序的实现
- 学习Socket编写的聊天室小程序
- Python: Socket编程之多线程聊天室
- Python基于Socket实现简单聊天室
- Android设置透明度
- 1月8号14点———学习笔记
- 微信 快速加好友
- 1月8号14点———学习笔记
- dom4j 最常用最简单的用法(转)
- Python socket聊天室程序
- 1月8号14点———学习笔记
- Android开发中定时器的3种方法
- JAVA设计模式(六)——建造者模式
- Dynamically Loading Controllers and Views with AngularJS/$controllerProvider and RequireJS
- 如何在windows上编译Tesseract OCR
- 关于python中的编码问题
- 简单php登陆注册模块
- 百度地图api的简单应用