基于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使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
python中如何使用insert函数
Jan 09 Python
Python的pygame安装教程详解
Feb 10 Python
Django models文件模型变更错误解决
May 11 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 Python
Python 正则模块详情
Nov 02 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
一个简单的域名注册情况查询程序
2006/10/09 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
详解json在php中的应用
2018/09/30 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
python算法演练_One Rule 算法(详解)
2017/05/17 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
大学生活动策划方案
2014/02/10 职场文书
美术国培研修感言
2014/02/12 职场文书
环保小标语
2014/06/13 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
新娘婚礼致辞
2015/07/27 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
Java 异步任务计算FutureTask
2022/04/28 Java/Android