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三元运算符实现方法
Dec 17 Python
Python实现的爬虫功能代码
Jun 24 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
python numpy元素的区间查找方法
Nov 14 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
Python while循环使用else语句代码实例
Feb 07 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
如何使用PyCharm及常用配置详解
Jun 03 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世纪万年历
2006/12/06 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
使用JS动态显示文本
2017/09/09 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
学习python类方法与对象方法
2016/03/15 Python
Python正则表达式知识汇总
2017/09/22 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
库房主管岗位职责
2013/12/31 职场文书
工作交流会欢迎词
2014/01/12 职场文书
公司拓展活动方案
2014/02/13 职场文书
2015年度企业工作总结
2015/05/21 职场文书
孔子观后感
2015/06/08 职场文书
golang中的空接口使用详解
2021/03/30 Python
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang