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下使用Psyco模块优化运行速度
Apr 05 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
Python3中函数参数传递方式实例详解
May 05 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
搭建pypi私有仓库实现过程详解
Nov 25 Python
selenium判断元素是否存在的两种方法小结
Dec 07 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
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
js 数组操作代码集锦
2009/04/28 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
如何用Python合并lmdb文件
2018/07/02 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
自我鉴定思想方面
2013/10/07 职场文书
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
自荐书范文
2013/12/08 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
2014年国庆节寄语
2014/09/19 职场文书
2015年化验室工作总结
2015/04/23 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS