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 获取本机ip地址的两个方法
Feb 25 Python
python链接Oracle数据库的方法
Jun 28 Python
Python中元组,列表,字典的区别
May 21 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
python实现二叉树的遍历
Dec 11 Python
python导出chrome书签到markdown文件的实例代码
Dec 27 Python
Python当中的array数组对象实例详解
Jun 12 Python
pytorch使用tensorboardX进行loss可视化实例
Feb 24 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
PHP中soap的用法实例
2014/10/24 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python的函数嵌套的使用方法
2014/01/24 Python
python字符串连接方式汇总
2014/08/21 Python
在Django中创建动态视图的教程
2015/07/15 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Python多线程原理与用法详解
2018/08/20 Python
Python I/O与进程的详细讲解
2019/03/08 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Python常用库大全及简要说明
2020/01/17 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
旅游管理专业大学生职业规划书
2014/02/27 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
小学课外阅读总结
2014/07/09 职场文书