python網路編程——TCP

來源:互聯網
上載者:User

標籤:

<pre name="code" class="python">



一、網路通訊模式

對於網路通訊,現在遵循的是TCP/IP協議組。

而現在設計的通訊模式中,主要使用的是用戶端/伺服器編程,所謂的用戶端就是我們使用者所用的軟體,而服務端則是程式開發人員根據用戶端的需要設計的服務模式,為了是滿足用戶端的要求,實現和用戶端進行正常通訊。

二、通訊端:通訊的端點

對於tcp/Ip協議來說,它是一個多層協議族,分別是物理層,資料連結層,網路層,傳輸層,應用程式層。對於網路層的作用來說,主要是從網路中的一台主機找到另一台主機,而傳輸層的作用是在一台主機中,選擇一個應用連接埠(對於一台電腦來說,可能要運行很多應用,作業系統留下了很多連接埠,用於處理每個不同的應用軟體)。

1、連線導向的通訊(TCP)

所謂的連線導向的通訊,也就是基於TCP協議的通訊方式。這種方式是一種順序的,可靠的,不會重複的傳輸方式。

2、不需連線的通訊(UDP)

資料無需建立串連就可以進行通訊。

三、基於TCP的網路編程

TCP伺服器端:

1. 第一步是建立socket對象。調用socket建構函式。如:
socket = socket.socket( family, type )
family參數代表地址家族,可為AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用於同一台機器上的處理序間通訊。
type參數代表通訊端類型,可為SOCK_STREAM(流通訊端)和SOCK_DGRAM(資料通訊端)。
2. 第二步是將socket綁定到指定地址。這是通過socket對象的bind方法來實現的:
socket.bind( address )
由AF_INET所建立的通訊端,address地址必須是一個雙元素元組,格式是(host,port)。host代表主機,port代表連接埠號碼。如果連接埠號碼正在使用、主機名稱不正確或連接埠已被保留,bind方法將引發socket.error異常。
3. 第三步是使用socket通訊端的listen方法接收串連請求。
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方法在接收資料時會進入“blocked”狀態,最後返回一個字元 串,用它表示收到的資料。如果發送的資料量超過了recv所允許的,資料會被截短。多餘的資料將緩衝於接收端。以後調用recv時,多餘的資料會從緩衝區 刪除(以及自上次調用recv以來,客戶可能發送的其它任何資料)。
6. 傳輸結束,伺服器調用socket的close方法關閉串連

虛擬碼大致如下:

1 建立通訊端,綁定通訊端到當地地址,然後開始監聽串連。就是socket,bind,listen。

2 進入迴圈,不斷接受用戶端的串連請求,然後接收傳來的資料,當然也可以發送給對方資料。就是accept一個串連,然後recv資料。

3 接收完畢可以關閉通訊端,close。

ss.socket(Socket.AF_INET,Socket.SOCK_STRAM)  #建立伺服器通訊端

ss.bind() #把本地地址綁到通訊端上

ss.listen() #監聽串連

inf_loop: #伺服器無限迴圈

cs=ss.accept() #接受用戶端的串連

comm._loop: #通訊迴圈

cs.recv()/cs.send() #對話

cs.close() #關閉客戶通訊端

ss.close() #關閉伺服器通訊端



<pre name="code" class="python">post = '主機ip'port = 8899bufsiz = 1024addr = (post,port)tcpsersock = socket(AF_INET,SOCK_STREAM)tcpsersock.bind(addr)tcpsersock.listen(5)while True:    print 'wait client conncet'    tcpclient,addr =tcpsersock.accept()    print 'connect from ',addr    while True:        data = tcpclient.recv(bufsiz)        if not data:            break        tcpclient.send('[%s] %s' % (ctime(),data))#        tcpclient.close()tcpsersock.close()




TCP用戶端:

1.  第一步是建立一個socket以串連伺服器:socket = socket.socket( family, type )
2.  第二步是使用socket的connect方法串連伺服器。對於AF_INET家族,串連格式如下:
socket.connect( (host,port) )
host代表格服務器主機名稱或IP,port代表格服務器進程所綁定的連接埠號碼。如串連成功,客戶就可通過通訊端與伺服器通訊,如果串連失敗,會引發socket.error異常。
3.  第三步是處理階段,客戶和伺服器將通過send方法和recv方法通訊。
4.  傳輸結束,客戶通過調用socket的close方法關閉串連。

虛擬碼如下:

1 建立通訊端,然後串連遠端地址,socket ,connect。

2 建立串連之後開始發送資料。Send(data),當然可以從緩衝區讀取伺服器發來的資料。Recv(BUFF)

3 完畢後,關閉通訊端。Close

cs=socket(Socket.AF_INET,Socket.SOCK_DGRAM)

#建立客戶通訊端

cs.connect() #嘗試串連伺服器

comm._loop: #通訊迴圈

cs.send()/cs.recv() #對話

cs.close() #關閉通訊端

from socket import *;host = '主機ip'port = 8899bufsiz = 1024addr = (host,port)tcpclisock = socket(AF_INET,SOCK_STREAM)tcpclisock.connect(addr)while True:    data = raw_input('> ')    if not data:        break    tcpclisock.send(data)    data_rec = tcpclisock.recv(bufsiz)    if not data_rec:        break    print data_rec


<pre name="code" class="python">post = '210.25.137.230'port = 8899bufsiz = 1024addr = (post,port)tcpsersock = socket(AF_INET,SOCK_STREAM)tcpsersock.bind(addr)tcpsersock.listen(5)while True:    print 'wait client conncet'    tcpclient,addr =tcpsersock.accept()    print 'connect from ',addr    while True:        data = tcpclient.recv(bufsiz)        if not data:            break        tcpclient.send('[%s] %s' % (ctime(),data))#        tcpclient.close()tcpsersock.close()


python網路編程——TCP

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.