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 相关文章推荐
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
Python 描述符(Descriptor)入门
Nov 20 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
python实现淘宝秒杀脚本
Jun 23 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
python程序输出无内容的解决方式
Apr 09 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
pandas DataFrame.shift()函数的具体使用
May 24 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
hadoop中一些常用的命令介绍
2013/06/19 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
Javascript Math对象
2009/08/13 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
初步探究Python程序的执行原理
2015/04/11 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
简单通用的简历自我评价
2014/09/21 职场文书
法院个人总结
2015/03/03 职场文书
大学体育课感想
2015/08/10 职场文书
mysql如何能有效防止删库跑路
2021/10/05 MySQL
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python