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

转载  更新时间:2017年09月12日 11:54:13   作者:Lockeyi   我要评论

这篇文章主要为大家详细介绍了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版本的用户可能缺乏一定的兼容性,如果是其他平台用户请自行修正!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python字符串处理函数简明总结

    Python字符串处理函数简明总结

    这篇文章主要介绍了Python字符串处理函数简明总结,本文总结了一些常用的字符串处理函数,需要的朋友可以参考下
    2015-04-04
  • Python获取系统默认字符编码的方法

    Python获取系统默认字符编码的方法

    这篇文章主要介绍了Python获取系统默认字符编码的方法,涉及Python中sys模块getdefaultencoding方法的使用技巧,需要的朋友可以参考下
    2015-06-06
  • 利用PyInstaller将python程序.py转为.exe的方法详解

    利用PyInstaller将python程序.py转为.exe的方法详解

    这篇文章主要给大家介绍了利用PyInstaller将python程序.py转为.exe的方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • python计数排序和基数排序算法实例

    python计数排序和基数排序算法实例

    这篇文章主要介绍了python计数排序和基数排序算法实例,需要的朋友可以参考下
    2014-04-04
  • 使用Python压缩和解压缩zip文件的教程

    使用Python压缩和解压缩zip文件的教程

    这篇文章主要介绍了使用Python压缩和解压缩zip文件的教程,主要用到了zipfile包,需要的朋友可以参考下
    2015-05-05
  • 浅谈python字符串方法的简单使用

    浅谈python字符串方法的简单使用

    下面小编就为大家带来一篇浅谈python字符串方法的简单使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Python 连连看连接算法

    Python 连连看连接算法

    这段时间老是“不务正业”的搞一些东西玩。之前的贪吃蛇,俄罗斯方块激发了我研究游戏算法的兴趣。经过1个星期的构思,连连看的连接算法终于出炉了。再过一段时间就基于这个算法使用JavaScript推出网页版的连连看。下面是说明及代码。
    2008-11-11
  • 浅述python中argsort()函数的实例用法

    浅述python中argsort()函数的实例用法

    本篇文章主要介绍了浅述python中argsort()函数的实例用法,详细的介绍了argsort()函数的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • Python实现删除Android工程中的冗余字符串

    Python实现删除Android工程中的冗余字符串

    这篇文章主要介绍了Python实现删除Android工程中的冗余字符串,本文实现的是删除Android资源(语言)国际化机制中的一些冗余字符串,需要的朋友可以参考下
    2015-01-01
  • 在 Python 应用中使用 MongoDB的方法

    在 Python 应用中使用 MongoDB的方法

    这篇文章主要介绍了在 Python 应用中使用 MongoDB的方法,需要的朋友可以参考下
    2017-01-01

最新评论