基于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 相关文章推荐
Python Mysql自动备份脚本
Jul 14 Python
python绘图库Matplotlib的安装
Jul 03 Python
python概率计算器实例分析
Mar 25 Python
Python正则表达式匹配HTML页面编码
Apr 08 Python
python实现批量下载新浪博客的方法
Jun 15 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python对象与json相互转换的方法
May 07 Python
python的依赖管理的实现
May 14 Python
利用Python函数实现一个万历表完整示例
Jan 23 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
linux实现php定时执行cron任务详解
2013/12/24 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
django解决跨域请求的问题
2018/11/11 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
python 5个顶级异步框架推荐
2020/09/09 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
大学生党课思想汇报
2013/12/29 职场文书
党校培训思想汇报
2013/12/30 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
Python编写nmap扫描工具
2021/07/21 Python
Java8中Stream的一些神操作
2021/11/02 Java/Android
JavaScript文档对象模型DOM
2021/11/20 Javascript