歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用SocketServer編寫一個套接字程序

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

日期:2017/3/1 9:30:29   编辑:Linux編程

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