標籤:tcp socket python
python可以利用socket庫實現通訊端編程。通訊端編程通常分為server端和client端,編程時一般是先server再client,這是最正常的邏輯,因為功能是由server提供的,client必鬚根據server提供的規則來建立串連和發送訊息。
server端的函數:
函數 |
描述 |
|
s.bind(address) |
將通訊端綁定到地址, 在AF_INET下,以元組(host,port)的形式表示地址. |
|
s.listen(backlog) |
開始監聽TCP傳入串連。backlog指定在拒絕串連之前,作業系統可以掛起的最大串連數量。該值至少為1,大部分應用程式設為5就可以了。 |
|
s.accept() |
接受TCP串連並返回(conn,address),其中conn是新的通訊端對象,可以用來接收和發送資料。address是串連用戶端的地址。 |
|
|
伺服器建立TCP串連的流程如下:
socket()建立通訊端->
bind()綁定地址和連接埠->
listen()開始監聽串連請求->
accept()接受串連請求,並返回一個新的通訊端用於處理後續操作->
recv()和send()對資料進行收發->
新通訊端和舊通訊端依次close()->end
代碼練習:
import socketfrom time import ctimeHOST = ""PORT = 10012ADDR = (HOST,PORT)BUFSIZE = 1024s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(ADDR)s.listen(5)while True: print "Waiting for connection..." conn,addr = s.accept() print "...connection from:",addr while True: data = conn.recv(BUFSIZE) if not data: break conn.send(‘[%s] %s‘%(ctime(),data)) print [ctime()],‘:‘,dataconn.close()s.close()
用戶端函數:
函數 |
描述 |
s.connect(address) |
串連到address處的通訊端。一般address的格式為元組(hostname,port),如果串連出錯,返回socket.error錯誤。 |
s.connect_ex(adddress) |
功能與connect(address)相同,但是成功返回0,失敗返回errno的值。 |
|
用戶端建立TCP串連的流程:
socket()建立通訊端->
connection()請求建立串連->
recv()和send()對資料進行收發->
close()通訊端中斷連線->end
注意,用戶端在建立串連後沒有返回新的通訊端
代碼練習:
import socketfrom time import ctimeHOST = ‘localhost‘PORT = 10012BUFSIZE = 1024ADDR = (HOST,PORT)tcpSock =socket.socket(socket.AF_INET,socket.SOCK_STREAM)tcpSock.connect(ADDR)while True: data = raw_input(">") if not data: break tcpSock.send(data) data = tcpSock.recv(BUFSIZE) if not data: break print data tcpSock.close()
示範如下
用戶端輸入:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5B/7B/wKiom1UJjxCSQjnwAADCuuhd_xI045.jpg" title="c.JPG" style="font-size:16px;float:none;" alt="wKiom1UJjxCSQjnwAADCuuhd_xI045.jpg" />
伺服器端:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5B/75/wKioL1UJkDiRAsfGAADiDaFNcyw401.jpg" style="float:none;" title="s.JPG" alt="wKioL1UJkDiRAsfGAADiDaFNcyw401.jpg" />
本文出自 “綿之學習筆記” 部落格,請務必保留此出處http://chenmg.blog.51cto.com/3039876/1622025
python socket編程練習(TCP)