使用socketserver寫乙個套接字程式來實現多執行緒,即伺服器端可與多個客戶端進行通話,首先伺服器端程式為:
#!/usr/bin/python
#coding:utf-8
import socketserver
class mytcphandle(socketserver.baserequesthandler):
def handle(self):
print("recived address:"+format(self.client_address[0]))
while true:
self.data=self.request.recv(1024*4).strip()
print(self.data)
self.request.sendall(self.data.upper())
if __name__=="__main__":
host,port="localhost",9999
server=socketserver.threadingtcpserver((host,port),mytcphandle)
server.serve_forever() #迴圈停止,等待它。
客戶端源程式為:
#!/usr/bin/python
#coding:utf-8
import socket
host,port="localhost",9999
data=""
sock=socket.socket(socket.af_inet,socket.sock_stream)
try:
sock.connect((host,port))
while true:
data=input("please input a string:")
sock.sendall(data.encode('utf-8','strict'))
received=sock.recv(1024*4)
print(str(received))
except exception:
raise
finally:
sock.close()
其實只有伺服器端的原始碼不同,客戶端與之前的用socket寫的客戶端原始碼相同。
在這裡伺服器端要進行多個通話,因此,只是將接收到的字串大寫後然後再進行返回,現在執行伺服器端以及兩個客戶端的結果為:
伺服器端:
客戶端1:
客戶端2:
於是這便實現了多執行緒的socket通話,其實在這個程式的關鍵原始碼為:
socketserver.threadingtcpserver((host,port),mytcphandle)
這一行實現了多執行緒通話,以及這一行:
server.serve_forever() #迴圈停止,等待它。
這一行的原始碼效果為不會出現在乙個客戶端結束後,當前伺服器端就會關閉或者報錯,而是繼續執行,與其他的客戶端繼續進行通話。
使用socketserver進行多執行緒通話,就是這樣。
python之路 socketserver模組
通過socketserver模組實現套接字併發 基於tcp協議的套接字可以分為兩個階段 鏈結迴圈與通訊迴圈,與之對應的,socketserver模組中有兩個類,server類用於解決鏈結問題,request類用於解決通訊問題 server端 import json import struct imp...
server併發,socketserver模組
server併發,socketserver模組 一 server併發 1 server併發服務端 author wylkjj date 2019 4 20 server併發服務端 import socketserver class myserve socketserver.baserequestha...
socketserver實現併發
使用socketserver模組實現多執行緒或多程序併發 tcp服務端 import socketserver class myserver socketserver.baserequesthandler defhandle self print conn是 self.request 建立的鏈結,s...