基于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读写文件操作示例程序
Dec 02 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
python实现批量修改文件名代码
Sep 10 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
对Python中画图时候的线类型详解
Jul 07 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python中seaborn包常用图形使用详解
Nov 25 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
记录模型训练时loss值的变化情况
Jun 16 Python
python 如何对logging日志封装
Dec 02 Python
python - timeit 时间模块
Apr 06 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实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
react的hooks的用法详解
2020/10/12 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
经理职责范文
2013/11/08 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
读群众路线的心得体会
2014/09/03 职场文书
时尚女魔头观后感
2015/06/04 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书