python多线程socket编程之多客户端接入


Posted in Python onSeptember 12, 2017

Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务
端用有很多模块可以使用,如下:

python多线程socket编程之多客户端接入

1、客户端

#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/9/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程客户端,python3.6.2
'''
import socket,sys
HOST = '192.168.1.6'
PORT = 8998
ADDR =(HOST,PORT)
BUFSIZE = 1024

sock = socket.socket()
try:
 sock.connect(ADDR)
 print('have connected with server')

 while True:
  data = input('lockey# ')
  if len(data)>0:
  print('send:',data)
  sock.sendall(data.encode('utf-8')) #不要用send()
  recv_data = sock.recv(BUFSIZE)
  print('receive:',recv_data.decode('utf-8'))
  else:
  sock.close()
  break
except Exception:
 print('error')
 sock.close()
 sys.exit()

2、SocketServer模块

为了能够让多个客户端同时接入服务并进行通信,服务端将使用SocketServer模块来实现,这样的话用户不用在子线程结束后,利用父进程对它进行处理,也不用关心socket的关闭,一切都由SocketServer来完成。

#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/9/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程服务器端,python3.6.2
'''
from socketserver import BaseRequestHandler,ThreadingTCPServer
import threading

BUF_SIZE=1024

class Handler(BaseRequestHandler):
 def handle(self):
  address,pid = self.client_address
  print('%s connected!'%address)
  while True:
   data = self.request.recv(BUF_SIZE)
   if len(data)>0:
    print('receive=',data.decode('utf-8'))
    cur_thread = threading.current_thread()
    #response = '{}:{}'.format(cur_thread.ident,data)
    self.request.sendall('response'.encode('utf-8'))
    print('send:','response')
   else:
    print('close')
    break

if __name__ == '__main__':
 HOST = '192.168.1.6'
 PORT = 8998
 ADDR = (HOST,PORT)
 server = ThreadingTCPServer(ADDR,Handler) #参数为监听地址和已建立连接的处理类
 print('listening')
 server.serve_forever() #监听,建立好TCP连接后,为该连接创建新的socket和线程,并由处理类中的handle方法处理
 print(server)

以下测试中我使用另外一台主机和本机的两个中断去连接服务器,都可以正常连接并且能进行数据应答交互

python多线程socket编程之多客户端接入

注意:此程序示例运行平台为rhel7.2.x86_64,python版本为3.6.2,对于windows平台和非同一python版本的用户可能缺乏一定的兼容性,如果是其他平台用户请自行修正!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 流程控制实例代码
Sep 25 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
python获取图片颜色信息的方法
Mar 18 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
python re库的正则表达式入门学习教程
Mar 08 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
python生成器推导式用法简单示例
Oct 08 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
python数据结构之链表详解
Sep 12 #Python
Python数据结构之单链表详解
Sep 12 #Python
python处理Excel xlrd的简单使用
Sep 12 #Python
Python3.6简单操作Mysql数据库
Sep 12 #Python
Python文件和流(实例讲解)
Sep 12 #Python
Anaconda多环境多版本python配置操作方法
Sep 12 #Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 #Python
You might like
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
通达OA公共代码 php常用检测函数
2011/12/14 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
php递归实现无限分类的方法
2015/07/28 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Python中不同进制的语法及转换方法分析
2016/07/27 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
Python装饰器结合递归原理解析
2020/07/02 Python
python 元组和列表的区别
2020/12/30 Python
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
入党申请人的自我鉴定
2013/12/01 职场文书
小区停车场管理制度
2014/01/27 职场文书
社团活动总结范文
2014/04/26 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
毕业实习感受与体会
2015/05/26 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android