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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
在Docker上部署Python的Flask框架的教程
Apr 08 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
python和ruby,我选谁?
Sep 13 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
Python线程之定位与销毁的实现
Feb 17 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
使用python+whoosh实现全文检索
Dec 09 Python
python时间日期操作方法实例小结
Feb 06 Python
python pyhs2 的安装操作
Apr 07 Python
5行Python代码实现一键批量扣图
Jun 29 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文件操作实例代码
2012/05/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
Javascript 按位与运算符 (&)使用介绍
2014/02/04 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
Python爬取APP下载链接的实现方法
2016/09/30 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
vue实现倒计时功能
2021/03/24 Vue.js
销售顾问的岗位职责
2013/11/13 职场文书
办公室副主任岗位职责
2013/11/25 职场文书
《观舞记》教学反思
2014/04/16 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
python开发飞机大战游戏
2021/07/15 Python