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 相关文章推荐
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
Python语言实现将图片转化为html页面
Dec 06 Python
selenium+python实现自动登录脚本
Apr 22 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
10款最好的Python开发编辑器
Jul 03 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
Python如何实现远程方法调用
Aug 07 Python
Python pymysql模块安装并操作过程解析
Oct 13 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
python Zmail模块简介与使用示例
Dec 19 Python
python神经网络学习 使用Keras进行回归运算
May 04 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
php下统计用户在线时间的一种尝试
2010/08/26 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
date.parse在IE和FF中的区别
2010/07/29 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
node.js基础知识小结
2018/02/26 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
Python3访问并下载网页内容的方法
2015/07/28 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python实现装饰器、描述符
2018/02/28 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
Django实现聊天机器人
2021/05/31 Python
Python matplotlib绘制雷达图
2022/04/13 Python