使用socketserver寫乙個套接字程式

2021-06-27 21:46:01 字數 1808 閱讀 9725

使用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...