歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用SocketServer編寫一個套接字程序

使用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進行多線程通話,就是這樣。

Copyright © Linux教程網 All Rights Reserved