第16章 網路程式設計 2

2021-06-01 05:07:37 字數 2156 閱讀 3632

16.3 python中的網路程式設計

16.3.1 socket()模組函式

使用socket.socket()函式來建立套接字。

socket(socket_family, socket_type, protocol = 0)

>>> import socket

>>> tcpsock = socket.socket(socket.af_inet, socket.sock_stream)

>>> udpsock = socket.socket(socket.af_inet, socket.sock_dgram)

>>>

16.3.3 建立乙個tcp伺服器

所有的套接字都用socket.socket()函式來建立。伺服器需要"坐在某個埠上"等待請求。所以它們必需要「繫結」到乙個本地的位址上。由於tcp是乙個面向連線的通訊系統,在tcp伺服器可以開始工作之前,要先完成一些設定。tcp伺服器必須「監聽」(進來的)連線,設定完成之後,伺服器就可以進入無限迴圈了。

乙個簡單的(單執行緒的)伺服器會呼叫accept()函式等待連線的到來。預設情況下,accept()函式是阻塞式的,即程式在連線到來之前會處於掛起狀態。套接字也支援非阻塞模式。

一旦接收到乙個連線,accept()函式就會返回乙個單獨的客戶端套接字用於後續的通訊。使用新的客戶端套接字就像把客戶的**轉給乙個客戶服務人員。

在臨時套接字建立好之後,通訊就可以開始了。客戶與伺服器都使用這個新建立的套接字進行資料的傳送與接收,直到通訊的某一方關閉了連線或傳送了乙個空字串之後,通訊就結束了。

在設計乙個更智慧型的退出方案時,比方說,伺服器被通知要關閉時,要確保close()函式會被呼叫。

from socket import *

from time import ctime

host = ''

port = 12345

bufsiz = 1024 #cache size is 1k

addr = (host, port)

tcpsersock = socket(af_inet, sock_stream)

tcpsersock.bind(addr)

tcpsersock.listen(5)

while true:

print 'waiting for connection...'

tcpclisock, addr = tcpsersock.accept()

print '...connected from:', addr

while true:

data = tcpclisock.recv(bufsiz)

if not data:

break

tcpclisock.send('[%s] %s' % (ctime(), data))

tcpclisock.close()

tcpsersock.close()

16.3.4 建立tcp客戶端

所有的套接字都由socket.socket()函式建立。在客戶端有了套接字之後,馬上就可以呼叫connect()函式去連線伺服器。連線建立後,就可以與伺服器開始對話了。在對話結束後,客戶端就可以關閉套接字,結束連線。

from socket import *

host = 'localhost'

port = 12345

bufsiz = 1024

addr = (host, port)

tcpclisock = socket(af_inet, sock_stream)

tcpclisock.connect(addr)

while true:

data = raw_input('> ')

if not data:

break

tcpclisock.send(data)

data = tcpclisock.recv(bufsiz)

if not data:

break

print data

tcpclisock.close()

16.3.5 執行我們的客戶端與tcp伺服器

伺服器是乙個被動端,它先建立自己然後被動地等待連線。而客戶端則是主動端,由它主動建立乙個連線。

要先開伺服器,後開客戶端。

第16章 網路程式設計

網路通訊協議 計算機網路中實現通訊必須有一些約定,即通訊協議,對速率 傳輸 結構 傳輸控制步驟 出錯控制等制定標準。通訊協議分層的思想 由於結點之間聯絡很複雜,在制定協議時,把複雜成份分解成一些簡單的成份,再將它們復合起來。最常用的復合方式是層次方式,即同層間可以通訊 上一層可以呼叫下一層,而與再下...

第16章 網路程式設計

利用套接字 socket 開發網路應用程式早已被廣泛的採用,以至於成為事實上的標準。通訊的兩端都要有socket,是兩台機器間通訊的端點 網路通訊其實就是socket間的通訊。socket允許程式把網路連線當成乙個流,資料在兩個socket間通過io傳輸。一般主動發起通訊的應用程式屬客戶端,等待通訊...

第14章 網路程式設計

14.1 幾個網路模組 服務端 import socket s socket.socket host socket.gethostname port 8090 s.bind host,port s.listen 5 while true c,addr s.accept print got conne...