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脚本实时处理log文件的方法
Nov 21 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
Python_LDA实现方法详解
Oct 25 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
如何使用python自带IDLE的几种方法
Oct 10 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
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
Yii使用技巧大汇总
2015/12/29 PHP
PHP目录操作实例总结
2016/09/27 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
jquery.validate使用攻略 第二部
2010/07/01 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
Python中的多行注释文档编写风格汇总
2016/06/16 Python
python查看模块,对象的函数方法
2018/10/16 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
煤矿班组长的职责
2013/12/25 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
优秀大学生自荐信
2015/03/26 职场文书
介绍信范文大全
2015/05/07 职场文书
用人单位聘用意向书
2015/05/11 职场文书
初中班主任工作随笔
2015/08/15 职场文书