基于python3的socket聊天编程


Posted in Python onFebruary 17, 2020

本文实例为大家分享了基于python3的socket聊天编程,供大家参考,具体内容如下

阶段一:最简易的聊天系统

缺点:程序不够完善,只能一来一回,且没人每次只能说一句话

server端:

import socket
HostPort = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(HostPort)
s.listen(1)
conn,addr = s.accept()
#print('Connecting by : %s ' % addr)
while 1:
 data = conn.recv(1024).decode()
 print (data)
 user_input = input('>>>')
 conn.send(user_input.encode('utf8'))
 #conn.close()
s.close()

client端:

import socket
hostport = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(hostport)
 
while 1:
 user_input = input('>>> ').strip()
 s.send(user_input.encode('utf-8'))
 if len(user_input) == 0:
 continue
 if user_input == 'quit':
 s.close()
 break
 server_reply = s.recv(1024).decode()
 print (server_reply)

注意事项:在python 3中,bytes和str是两个不同的概念,send和recv的数据都是bytes,而str转化成bytes是通过encode('utf8')实现,bytes转化成str,是通过decode()实现;

在该阶段,服务十分不稳定,经常会断开,所以有下一个阶段,且每人每次可以发送多条消息;

阶段二  多线程并发聊天系统

在阶段一中,服务器端和客户的通信只能一发一收,不能实现服务器端和客户端双方的自由消息发送,所以,我们引用多线程,我们将消息的接收单独开一个线程,这样便可以服务器端和客户端实现同时发送多条消息,并不影响接收;

开始上代码:

server端:

import socket
import threading # 导入多线程模块
print("Waitting to be connected......")
HostPort = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建socket实例
s.bind(HostPort)
s.listen(1)
conn,addr = s.accept()
true=True
addr = str(addr)
print('Connecting by : %s ' %addr )
def Receve(conn):   # 将接收定义成一个函数
 global true # 声明全局变量,当接收到的消息为quit时,则触发全局变量 true = False,则会将socket关闭
 while true:
 data = conn.recv(1024).decode('utf8') 
 if data == 'quit':
 true=False
 print("you have receve: "+data+" from"+addr) # 当接收的值为'quit'时,退出接收线程,否则,循环接收并打印
thrd=threading.Thread(target=Receve,args=(conn,)) # 线程实例化,target为方法,args为方法的参数 
thrd.start()    # 启动线程
while true:
 user_input = input('>>>')
 conn.send(user_input.encode('utf8'))  # 循环发送消息
 if user_input == 'quit':   # 当发送为‘quit'时,关闭socket
 true = False
 #conn.close()
s.close()

client 端

import socket
import threading
hostport = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(hostport)
true = True
def Receve(s):
 global true
 while true:
 data = s.recv(1024).decode('utf8')
 if data == 'quit':
 true = False
 print('recevie news:\033[5;37;46m%s\033[0m' % data )
thrd=threading.Thread(target=Receve,args=(s,))
thrd.start()
while true:
 user_input = input('>>>')
 s.send(user_input.encode('utf8'))
 if user_input == 'quit':
 true = False
s.close()

效果展示(紫色字体为接收消息,白色字体为发送消息,双方任意一方输入'quit',即可退出)

1、服务器端:(原来只能服务器端先接收消息后才能发送消息,现在没有这种限制,可以随时主动发送)

基于python3的socket聊天编程

2、客户端     

基于python3的socket聊天编程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
Python实现学生成绩管理系统
Apr 05 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
pandas DataFrame索引行列的实现
Jun 04 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
python检测服务器端口代码实例
Aug 31 Python
django实现类似触发器的功能
Nov 15 Python
python 统计文件中的字符串数目示例
Dec 24 Python
公认8个效率最高的爬虫框架
Jul 28 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 #Python
python词云库wordcloud的使用方法与实例详解
Feb 17 #Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 #Python
Python基于Socket实现简单聊天室
Feb 17 #Python
TFRecord文件查看包含的所有Features代码
Feb 17 #Python
tensorflow之tf.record实现存浮点数数组
Feb 17 #Python
Python读取表格类型文件代码实例
Feb 17 #Python
You might like
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
坏狼的PHP学习教程之第1天
2008/06/15 PHP
php的memcached客户端memcached
2011/06/14 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
复选框全选与全不选操作实现思路
2013/08/18 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python读取csv文件示例(python操作csv)
2014/03/11 Python
简单介绍Python中的JSON模块
2015/04/08 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
实例详解Python装饰器与闭包
2019/07/29 Python
Django 自动生成api接口文档教程
2019/11/19 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
Final类有什么特点
2012/04/25 面试题
企业承诺书怎么写
2014/05/24 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
2015年加油站工作总结
2015/05/13 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
工作感想范文
2015/08/07 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python