標籤:
1、用戶端串連
用戶端串連有4個步驟:
(1)建立一個socket對象
Socket=socket.socket(family,type)
(2)使用socket的connect方法串連伺服器
Socket.connect((host,port))
其中,host是伺服器的IP地址,如果只是知道伺服器的網域名稱,可以通過host = socket.gethostbyname( hostname )獲得。
port是伺服器開啟的連接埠號碼,通過port=socket.getservbyname(servicename[,protocolname])來尋找服務資訊,該函數將互連網服務名稱和協議的名稱翻譯為連接埠號碼。protocolname為協議名稱,如果有,應該是“TCP”或“UDP”,否則,任何協議都將匹配。
(3)用戶端和伺服器通過send和recv方法通訊。
(4)用戶端通過調用socket的close方法來關閉串連。
2、伺服器串連
建立伺服器串連有6個步驟:
(1)建立socket對象;
(2)將socket綁定到指定地址上,s.bind(("IP",port))
(3)偵聽串連,socket.listen(backlog),backlog指定了最多串連數,至少為1,接到串連請求後,這些請求必須排隊,如果隊列已滿,則拒絕請求。
(4)伺服器通訊端通過socket的accept方法等待客戶請求一個串連:
connection,address=socket.accept()
調用accept方法時,socket會進入‘waiting‘(或阻塞)狀態。客戶請求串連時,方法建立串連並返回伺服器。accept方法返回一個含 有倆個元素的元組,形如(connection,address)。第一個元素(connection)是新的socket對象,伺服器通過它與客戶通 信;第二個元素(address)是客戶的internet地址。
(5)處理階段,伺服器和客戶通過send和recv方法通訊(傳輸資料)。伺服器調用send,並採用字串形式向客戶發送資訊。send方法返回已發送的字 符個數。伺服器使用recv方法從客戶接受資訊。調用recv時,必須指定一個整數來控制本次調用所接受的最大資料量。recv方法在接受資料時會進入 ‘blocket‘狀態,最後返回一個字串,用它來表示收到的資料。如果發送的量超過recv所允許,資料會被截斷。多餘的資料將緩衝於接受端。以後調 用recv時,多餘的資料會從緩衝區刪除。
(6)傳輸結束,伺服器調用socket的close方法以關閉串連。
參考資料:
1、http://www.jb51.net/article/52078.htm
Python Socket編程小結