單程序伺服器
阿新 • • 發佈:2018-12-02
1. 完成一個簡單的TCP伺服器
from socket import * serSocket = socket(AF_INET, SOCK_STREAM) # 重複使用繫結的資訊 serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1) localAddr = ('', 7788) serSocket.bind(localAddr) serSocket.listen(5) while True: print('-----主程序,,等待新客戶端的到來------') newSocket,destAddr = serSocket.accept() print('-----主程序,,接下來負責資料處理[%s]-----'%str(destAddr)) try: while True: recvData = newSocket.recv(1024) if len(recvData)>0: print('recv[%s]:%s'%(str(destAddr), recvData)) else: print('[%s]客戶端已經關閉'%str(destAddr)) break finally: newSocket.close() serSocket.close()
2. 總結
1)同一時刻只能為一個客戶進行服務,不能同時為多個客戶服務
2)類似於找一個“明星”簽字一樣,客戶需要耐心等待才可以獲取到服務
3)當伺服器為一個客戶端服務時,而另外的客戶端發起了connect,只要伺服器listen的佇列有空閒的位置,就會為這個新客戶端進行連線,並且客戶端可以傳送資料,但當伺服器為這個新客戶端服務時,可能已一次性把所有資料接收完畢
4)當recv接收資料時,返回值為空,即沒有返回資料,那麼意味著客戶端已經呼叫了close關閉了;因此伺服器通過判斷recv接收資料是否為空 來判斷客戶端是否已經下線