python多线程socket编程之多客户端接入

作者:Lockeyi 时间:2021-01-26 10:14:52 

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版本的用户可能缺乏一定的兼容性,如果是其他平台用户请自行修正!!

来源:http://blog.csdn.net/lockey23/article/details/77915769

标签:python,多线程,socket
0
投稿

猜你喜欢

  • Mysql分区表的管理与维护

    2024-01-17 09:22:09
  • Microsoft .Net Remoting系列教程之一:.Net Remoting基础篇

    2024-05-09 09:03:35
  • vue中的mixins混入使用方法

    2023-07-02 17:01:47
  • Python实现数通设备端口使用情况监控实例

    2021-02-09 23:56:41
  • MySQL 有关MHA搭建与切换的几个错误log汇总

    2024-01-27 22:03:50
  • oracle 触发器 学习笔记

    2009-05-24 19:57:00
  • wxpython中自定义事件的实现与使用方法分析

    2023-02-10 07:50:26
  • Oracle数据库完整卸载的完整步骤

    2024-01-13 13:15:30
  • 对Python中的@classmethod用法详解

    2023-07-22 17:55:54
  • Python使用urllib2模块实现断点续传下载的方法

    2021-12-27 05:20:01
  • PHP获取表单所有复选框的值的方法

    2024-05-13 09:24:34
  • Javascirpt打造“互动指针”特效

    2013-08-06 07:37:52
  • SqlServer 按时间段查询问题

    2024-01-19 02:15:35
  • 深入理解Python中range和xrange的区别

    2023-06-22 06:10:09
  • 跟老齐学Python之变量和参数

    2023-01-12 22:23:31
  • 浅谈Python2获取中文文件名的编码问题

    2021-08-11 08:18:45
  • php mail to 配置详解

    2024-05-13 09:22:51
  • python3+opencv 使用灰度直方图来判断图片的亮暗操作

    2024-01-01 07:07:23
  • Python使用bar绘制堆积/带误差棒柱形图的实现

    2021-06-26 12:42:05
  • FF下,用 col 隐藏表格列的方法详解!

    2008-04-02 11:35:00
  • asp之家 网络编程 m.aspxhome.com