pythonsocket通信

學習編程,總會遇到服務器和客戶端,相互通信的問題,現在就來介紹一下python的socket模塊

首先理解一下客戶端和服務器的概念,服務器首先在一臺主機的ip和端口,啓動服務並監聽,等待客戶端的連接

客戶端通過服務器的ip和端口,連接到服務器

我們現在來用python寫服務器,創建一個server.py文件

1.創建socket對象,調用socket的構造函數,

<span style="font-size:14px;">server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)</span>
socket.socket(famliy,type),family代表地址家族,

family參數代表地址家族,可爲AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用於同一臺機器上的進程間通信。
type參數代表套接字類型,可爲SOCK_STREAM(流套接字)和SOCK_DGRAM(數據報套接字)。       

2.將socket綁定到服務器的主機和ip,通過Bind方法(假如我們在主機的2220端口進行監聽)

server.bind(('127.0.0.1',2220))
 由AF_INET所創建的套接字,address地址必須是一個雙元素元組,格式是(host,port)。host代表主機,port代表端口號。如果端口號正在使用、主機名不正確或端口已被保留,bind方法將引發socket.error異常。

3.服務器開始監聽,接收客戶端的連接請求

server.listen(5)
這裏的5的意思,可以允許多客戶端連接到服務器,至少爲1,超過這個數字,服務器便會拒絕連接

4.服務器套接字通過accept方法等待客戶請求的一個連接

connection,address=server.accept()
調 用accept方法時,socket會時入“waiting”狀態。客戶請求連接時,方法建立連接並返回服務器。accept方法返回一個含有兩個元素的 元組(connection,address)。第一個元素connection是新的socket對象,服務器必須通過它與客戶通信;第二個元素 address是客戶的Internet地址。

5.服務器和客戶端進行連接之後,先開始互相傳輸數據。服務器通過調用send方法,用字符串的形式向客戶發送信息,

通過recv方法接收客戶端發過來的數據,必須制定一個收到的最大數據量

server.send(data)
server.recv(1024)
6.等到數據傳輸結束,服務器調用close方法,關閉連接
server.close()
服務端基本上就是這樣,

接下來我們來創建客戶端,創建一個client.py

1.客戶端相應的也要創建一個socket對象,來連接服務端

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2.客戶端連接服務器,通過調用connect方法實現,這裏的主機和端口要和服務器綁定的一致

client.connect(('127.0.0.1',2220))
3.客戶端和服務器連接好後,便可開始和服務器進行數據交互

client.send(data)
client.recv(1024)
4.傳輸結束,客戶端調用socket的close方法
client.close




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章