python多线程socket编程之多客户端接入
作者:Lockeyi 发布时间:2021-01-26 10:14:52
标签:python,多线程,socket
Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务
端用有很多模块可以使用,如下:
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)
以下测试中我使用另外一台主机和本机的两个中断去连接服务器,都可以正常连接并且能进行数据应答交互
注意:此程序示例运行平台为rhel7.2.x86_64,python版本为3.6.2,对于windows平台和非同一python版本的用户可能缺乏一定的兼容性,如果是其他平台用户请自行修正!!
来源:http://blog.csdn.net/lockey23/article/details/77915769
0
投稿
猜你喜欢
- W3C 发布 XPath 1.0 规范是在 1999 年,那时我还正在备战高考,不料十年后,我才开始学习XPath,落后的差距不是一般的大(
- 小编今天写下关于后台管理员权限的分配自己的思路想法<?php /**reader * 小编的思想比较简单实现的功能
- 有时在处理不规则数据时需要提取文本包含的时间日期。dateutil.parser模块可以统一日期字符串格式。datefinder模块可以在字
- 首先要注册一个账号密码,通过账号密码登录,并且滑块验证,自动输入搜索关键词,进行跳转翻页爬取数据,并保存到Excel文件中。代码运行时,滑块
- 一、 简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和Where子句。它们分别说明所查询列、查询的表或视图、以及搜索
- 虽然现在的GMail已经看不到这个效果,但之前那个可爱的深红色Loading仍然让许多人喜爱。我也将这款效果融入了我自己的WordPress
- 在CSS森林群里讨论一个margin的问题中无意间发现overflow也可以用来清除浮动,嘿嘿,这个方法不单使用简单,而且FF、OP、IE7
- 首先我们有这么一种需求,就是我在一个列表中点击了某个item,跳转到详情界面,那么我就需要把item的实体数据从列表页面传递到详情页面,那么
- 概述微服务是一种思想,与编程语言无关,编程语言是思想下具体的一种实现方式,怎么设计架构方案和实现主要看主要面临的业务场景。业务场景主站核心业
- 本文实例为大家分享了微信小程序跳一跳自动运行脚本,供大家参考,具体内容如下1、压缩包带了adb等必须工具,配置一下环境变量即可2、Pytho
- 多级联动下拉选择框,动态获取下一级,每一级数据为XML,可支持无限级(浏览器端需要Microsoft.XMLDOM支持)项目需要,一个材料类
- var a = 0, b = 0;[0, 0].sort(function() {a = 1;return 0;});[0, 1].sort
- 将PHP的执行页面预先转换成HTML,是所谓的PHP静态化方法之一。其他还有模板替换法,opcache等方法。静态化的作用:提高网站的响应速
- 与部门同事做了个小小的交流,话题杂而浅,在此做一个小纪录。1、什么是设计工业设计、环境设计、建筑设计、平面设计、网页设计、服装设计、信息设计
- 大多数做过网页设计的都知道“CSS框架”,而且肯定有很多设计师已经开始在作品中使用CSS框架。就像其他编程语言一样,CSS也可以把一些重复使
- 数组我们已经提到过,对象是无序数据的集合,而数组则是有序数据的集合,数组中的数据(元素)通过索引(从0开始)来访问,数组中的数据可以是任何的
- 在Windows中安装MySQL时,有3种MySQL 5.1安装软件包可供选择:· 基本安装:该安装软件包的文件名类似
- 在过去的两年里,你能想象的一些很烂的应用设计也入驻了优雅的iPhone。通过它周边的宣传,使得世界各地的设计者们都利用这个新的移动工具来一展
- ASP有一个最重要的功能,就是它可以让你非常轻松地连接数据库。通常都是和一个Access或者一个SQL数据库相连。因为Access是最容易起
- 上四篇的内容是把常用的XHTML标签拿出来介绍了一下,不是很详细。不过没关系,重点是要能先知道用他们,以后深入了再去细细研究更为详细的特性以