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命令行参数解析模块getopt使用实例
Apr 13 Python
python基础之入门必看操作
Jul 26 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
Django实现简单网页弹出警告代码
Nov 15 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
Python实现序列化及csv文件读取
Jan 19 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
Python打印不合法的文件名
Jul 31 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 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
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
videocapture库制作python视频高速传输程序
2013/12/23 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
python3 线性回归验证方法
2019/07/09 Python
python map比for循环快在哪
2020/09/21 Python
PHP两种查询函数array/row的区别
2013/06/03 面试题
社区庆中秋节活动方案
2014/02/07 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
元宵节主持词
2014/03/25 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android
python游戏开发Pygame框架
2022/04/22 Python