Python socket聊天室程序
来源:互联网 发布:2016提升淘宝搜索排名 编辑:程序博客网 时间:2024/06/04 18:23
http://blog.csdn.net/calling_wisdom/article/details/42524745
今天用python的socket模块实现了一个聊天室的程序
虽然功能比较简单,但是该有的基本功能还是有的
还望大家指点
服务器端程序:
- import socket
- import threading
- sock = 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:
- pass
- def 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()
- return
- while 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 socket
- import time
- import threading
- sock = 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实现简单聊天室
- 异常
- ldconfig和ldd用法
- 保持与 Microsoft Azure Files 的连接
- hdu 2059 龟兔赛跑(DP)
- MySQL引擎介绍ISAM,MyISAM,HEAP,InnoDB
- Python socket聊天室程序
- POJ题目分类
- linux 中php以及nginx的重启命令
- MyEclipse + Maven开发Web工程的详细配置过程
- 什麽是Dalvik Virtual Machine?
- 北大ACM题分类
- php导入excel数据到mysql
- Windows下手动安装和配置xamarin
- C++学习(五)