基于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中的pprint折腾记
Jan 21 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
python中enumerate函数用法实例分析
May 20 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
浅谈Python中的bs4基础
Oct 21 Python
python实现桌面壁纸切换功能
Jan 21 Python
Python中Numpy ndarray的使用详解
May 24 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
简单的Python调度器Schedule详解
Aug 30 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
python对Excel的读取的示例代码
Feb 14 Python
python中subplot大小的设置步骤
Jun 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
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
单位未婚证明范本
2014/01/18 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
党支部半年考察意见
2015/06/01 职场文书
边城读书笔记
2015/06/29 职场文书
学习党史心得体会2016
2016/01/23 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
Python 中面向接口编程
2022/05/20 Python