首頁  >  文章  >  後端開發  >  python多執行緒socket程式設計中將多客戶端存取的方法

python多執行緒socket程式設計中將多客戶端存取的方法

巴扎黑
巴扎黑原創
2017-09-13 09:39:161925瀏覽

這篇文章主要為大家詳細介紹了python多線程socket編程之多客戶端接入,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

以上是python多執行緒socket程式設計中將多客戶端存取的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn