基于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设计模式之观察者模式实例
Apr 26 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
python实现贪吃蛇游戏
Mar 21 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
kafka监控获取指定topic的消息总量示例
Dec 23 Python
python颜色随机生成器的实例代码
Jan 10 Python
python实现感知机模型的示例
Sep 30 Python
Python Pygame实战之塔防游戏的实现
Mar 17 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 信息采集程序代码
2009/03/17 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
CSS3 边框效果
2019/11/04 HTML / CSS
会展中心部门工作职责
2013/11/27 职场文书
2014植树节活动总结
2014/03/11 职场文书
啦啦队口号大全
2014/06/16 职场文书
班主任经验交流材料
2014/12/16 职场文书
材料员岗位职责
2015/02/10 职场文书
税务会计岗位职责
2015/04/02 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle