1. 程式人生 > >單程序伺服器

單程序伺服器

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接收資料是否為空 來判斷客戶端是否已經下線