python多線程socket編程之多客戶端接入
Python中實(shí)現(xiàn)socket通信的服務(wù)端比較復(fù)雜,而客戶端非常簡單,所以客戶端基本上都是用sockct模塊實(shí)現(xiàn),而服務(wù)
端用有很多模塊可以使用,如下:

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模塊
為了能夠讓多個(gè)客戶端同時(shí)接入服務(wù)并進(jìn)行通信,服務(wù)端將使用SocketServer模塊來實(shí)現(xiàn),這樣的話用戶不用在子線程結(jié)束后,利用父進(jìn)程對(duì)它進(jìn)行處理,也不用關(guān)心socket的關(guān)閉,一切都由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編程服務(wù)器端,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) #參數(shù)為監(jiān)聽地址和已建立連接的處理類
print('listening')
server.serve_forever() #監(jiān)聽,建立好TCP連接后,為該連接創(chuàng)建新的socket和線程,并由處理類中的handle方法處理
print(server)
以下測(cè)試中我使用另外一臺(tái)主機(jī)和本機(jī)的兩個(gè)中斷去連接服務(wù)器,都可以正常連接并且能進(jìn)行數(shù)據(jù)應(yīng)答交互

注意:此程序示例運(yùn)行平臺(tái)為rhel7.2.x86_64,python版本為3.6.2,對(duì)于windows平臺(tái)和非同一python版本的用戶可能缺乏一定的兼容性,如果是其他平臺(tái)用戶請(qǐng)自行修正??!
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
pandas?實(shí)現(xiàn)?in?和?not?in?的用法及使用心得
pandas按條件篩選數(shù)據(jù)時(shí),除了使用query()方法,還可以使用isin和對(duì)isin取反進(jìn)行條件篩選,今天通過本文給大家介紹pandas?實(shí)現(xiàn)?in?和?not?in?的用法及使用心得,感興趣的朋友跟隨小編一起看看吧2023-01-01
基于Python批量鑲嵌拼接遙感影像/柵格數(shù)據(jù)(示例代碼)
這篇文章主要介紹了基于Python批量鑲嵌拼接遙感影像/柵格數(shù)據(jù),使用時(shí)直接修改Mosaic_GDAL函數(shù)的入?yún)⒕托辛?選擇數(shù)據(jù)存放的路徑會(huì)自動(dòng)拼接,命名也會(huì)自己設(shè)置無需額外修改,需要的朋友可以參考下2023-10-10
python實(shí)現(xiàn)三次密碼驗(yàn)證的示例
這篇文章主要介紹了python實(shí)現(xiàn)三次密碼驗(yàn)證的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04
Python基于win32ui模塊創(chuàng)建彈出式菜單示例
這篇文章主要介紹了Python基于win32ui模塊創(chuàng)建彈出式菜單,結(jié)合實(shí)例形式分析了Python使用win32ui模塊創(chuàng)建彈出式菜單的具體步驟與相關(guān)操作技巧,并附帶說明了win32ui模塊的安裝命令,需要的朋友可以參考下2018-05-05
python實(shí)現(xiàn)堆棧與隊(duì)列的方法
這篇文章主要介紹了python實(shí)現(xiàn)堆棧與隊(duì)列的方法,包含了堆棧與隊(duì)列的定義方法及常用操作,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01
Python OpenCV基于霍夫圈變換算法檢測(cè)圖像中的圓形
這篇文章主要介紹了通過霍夫圈變換算法檢測(cè)圖像中的圓形,文中用到的函數(shù)為cv2.HoughCircles(),該函數(shù)可以很好地檢測(cè)圓心。感興趣的小伙伴可以了解一下2021-12-12

