python socket通信多线程_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多线程socket编程之多客户端接入

本文地址: http://www.cppcns.com/jiaoben/python/203289.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值