python中socket TCP 基本程式設計知識

2021-07-11 05:57:46 字數 1986 閱讀 9283

python 編寫server的步驟

: 第一步

是建立socket物件。呼叫socket建構函式。如:

socket = socket.socket( family, type )

family引數代表位址家族,可為af_inet或af_unix。af_inet家族包括internet位址,af_unix家族用於同一臺機器上的程序間通訊。

type引數代表套接字型別,可為sock_stream(流套接字)和sock_dgram(資料報套接字)。

第二步socket.bind( address ) 

由af_inet所建立的套接字,address位址必須是乙個雙元素元組,格式是(host,port)。host代表主機,port代表埠號。如果埠號正在使用、主機名不正確或埠已被保留,bind方法將引發socket.error異常。

第三步是使用socket套接字的listen方法接收連線請求。

socket.listen( backlog )

backlog指定最多允許多少個客戶連線到伺服器。它的值至少為1。收到連線請求後,這些請求需要排隊,如果佇列滿,就拒絕請求。

第四步是伺服器套接字通過socket的accept方法等待客戶請求乙個連線。

connection, address = socket.accept()

調 用accept方法時,socket會時入「waiting」狀態。客戶請求連線時,方法建立連線並返回伺服器。accept方法返回乙個含有兩個元素的 元組(connection,address)。第乙個元素connection是新的socket物件,伺服器必須通過它與客戶通訊;第二個元素 address是客戶的internet位址

第五步是處理階段,伺服器向客戶端通過send和recv方法通訊(傳輸 資料)。伺服器呼叫send,並採用字串形式向客戶端傳送資訊,send方法返回已傳送的字元個數。伺服器使用recv方法從客戶接收資訊。呼叫recv 時,伺服器必須指定乙個整數,它對應於可通過本次方法呼叫來接收的最大資料量。recv方法在接收資料時會進入「blocked」狀態,最後返回乙個字元 串,用它表示收到的資料。如果傳送的資料量超過了recv所允許的,資料會被截短。多餘的資料將緩衝於接收端。以後呼叫recv時,多餘的資料會從緩衝區 刪除(以及自上次呼叫recv以來,客戶可能傳送的其它任何資料)。

傳輸結束,伺服器呼叫socket的close方法關閉連線。

python編寫client的步驟:

建立乙個socket以連線伺服器:socket = socket.socket( family, type )

使用socket的connect方法連線伺服器。對於af_inet家族,連線格式如下:

socket.connect( (host,port) )

host代表伺服器主機名或ip,port代表伺服器程序所繫結的埠號。如連線成功,客戶就可通過套接字與伺服器通訊,如果連線失敗,會引發socket.error異常。

處理階段,客戶和伺服器將通過send方法和recv方法通訊。

傳輸結束,客戶通過呼叫socket的close方法關閉連線。

下面給個簡單的例子: 

server.py 

python **

client.py 

python **

在終端執行server.py,然後執行clien.py,會在終端列印「welcome to server!"。如果更改client.py的sock.send('1')為其它值在終端會列印」please go out!「,更改time.sleep(2)為大於5的數值, 伺服器將會超時。

在socket選擇初始化乙個tcp協議的socket之後,就會繫結乙個位址和埠,然後開始listen,客戶端連線這個listen的tcp 之後,服務端會accept這個請求,然後產生乙個新的socket,雙方使用這個新的socket(位址和埠,位址還是上面listen的位址,埠 會是乙個新的,這個從列印出的結果中可以看出)進行後續的通訊。原來的埠會繼續的listen新的請求。

Socket程式設計 簡易測試socket TCP程式

簡易的利用socket 實現tcp連線的程式,旨在簡化程式結構,給初學者乙個啟示的作用.伺服器端程式 include stdafx.h include include include using namespace std pragma comment lib,ws2 32.lib 新增ws2 32...

python中 python中的 與

這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...

python中否定for 在python中否定函式

有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...