單程序伺服器

2021-09-02 04:00:29 字數 1036 閱讀 1897

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

併發伺服器模型 單程序伺服器

from socket import sersocket socket af inet,sock stream 重複使用繫結的資訊 sersocket.setsockopt sol socket,so reuseaddr 1 localaddr 7788 sersocket.bind localad...

單程序tcp伺服器 select版

io多路復用 沒有使用多程序和多執行緒的情況下完成多個套接字的使用。select 能夠完成一些套接字的檢查,從頭到尾檢查一遍後,標記哪些套接字是否可以收資料,返回的時候,就返回能接收資料的套接字,返回的是列表。select是由作業系統提供的,效率要高些,非常快的方式檢測哪些套接字可以接收資料。sel...

單程序tcp伺服器 epoll版

1 沒有最大併發連線的限制,能開啟的fd 指的是檔案描述符,通俗的理解就是套接字對應的數字編號 的上限遠大於1024。2 效率提公升,不是輪詢的方式,不會隨著fd數目的增加效率下降。只有活躍可用的fd才會呼叫callback函式 即epoll最大的優點就在於它只管你 活躍 的連線,而跟連線總數無關,...