python網路程式設計基礎 Demo 模組內建方法

2021-10-03 05:04:05 字數 3252 閱讀 8127

在python的實際應用中,經常需要進行網路程式設計,但是由於python天生的具有物件導向的屬性,使得很多實際的網路程式設計往往是封裝成各種模組的形式呈現,一般使用者可以無需關心具體實現,只需要了解物件的屬性及方法使用即可,但是,個人的理解是,如果能夠對網路程式設計的原理有乙個理解的話,這對於python比較多的模組使用會更加游刃有餘,話不多說,先呈現乙個簡單的client-server/cs結構demo

# 建立乙個服務端

import socket

# 建立乙個服務端

server = socket.socket(socket.af_inet,socket.sock_stream)

server.bind(

('localhost'

,6999))

# 繫結要監聽的埠

server.listen(5)

# 開始監聽 表示可以使用五個鏈結排隊

while

true

:# conn就是客戶端鏈結過來而在服務端為期生成的乙個鏈結例項

conn,addr = server.accept(

)#等待鏈結,多個鏈結的時候就會出現問題,其實返回了兩個值

print

(conn,addr)

while

true

:try

: data = conn.recv(

1024

)# 接收資料

print

('recive:'

,data.decode())

# 列印接收到的資料

conn.send(data.upper())

# 然後再傳送資料

except connectionreseterror as e:

print

('關閉了正在佔線的鏈結!'

)break

conn.close(

)

import socket      

# 客戶端 傳送乙個資料,再接收乙個資料

client = socket.socket(socket.af_inet,socket.sock_stream)

# 宣告socket型別,同時生成鏈結物件

client.connect(

('localhost'

,6999))

# 建立乙個鏈結,連線到本地的6969埠

while

true

:# addr = client.accept()

msg =

'hello python!'

client.send(msg.encode(

'utf-8'))

# 傳送一條資訊 python3 只接收btye流

data = client.recv(

1024

)# 接收乙個資訊,並指定接收的大小 為1024位元組

print

('recv:'

,data.decode())

# 輸出我接收的資訊

client.close(

)# 關閉這個鏈結

對於一般使用來說,低階別的網路服務支援基本的 socket,它提供了標準的 bsd sockets api,可以訪問底層作業系統socket介面的全部方法

下面是socket模組提供的一些方法這裡:

方法意義

s.bind()

繫結位址(host,port)到套接字, 在af_inet下,以元組(host,port)的形式表示位址。

s.listen()

開始tcp監聽。backlog指定在拒絕連線之前,作業系統可以掛起的最大連線數量。該值至少為1,大部分應用程式設為5就可以了。

s.accept()

被動接受tcp客戶端連線,(阻塞式)等待連線的到來

方法意義

s.connect()

主動初始化tcp伺服器連線,。一般address的格式為元組(hostname,port),如果連線出錯,返回socket.error錯誤。

s.connect_ex()

connect()函式的擴充套件版本,出錯時返回出錯碼,而不是丟擲異常

方法意義

s.recv()

接收tcp資料,資料以字串形式返回,bufsize指定要接收的最大資料量。flag提供有關訊息的其他資訊,通常可以忽略

s.send()

傳送tcp資料,將string中的資料傳送到連線的套接字,返回值是要傳送的位元組數量,該數量可能小於string的位元組大小

s.sendall()

完整傳送tcp資料,完整傳送tcp資料,將string中的資料傳送到連線的套接字,但在返回之前會嘗試傳送所有資料,成功返回none,失敗則丟擲異常

s.recvfrom()

接收udp資料,與recv()類似,但返回值是(data,address),其中data是包含接收資料的字串,address是傳送資料的套接字位址

s.sendto()

傳送udp資料,將資料傳送到套接字,address是形式為(ipaddr,port)的元組,指定遠端位址,返回值是傳送的位元組數

s.close()

關閉套接字

s.getpeername()

返回連線套接字的遠端位址,返回值通常是元組(ipaddr,port)

s.getsockname()

返回套接字自己的位址,通常是乙個元組(ipaddr,port)

s.setsockopt(level,optname,value)

設定給定套接字選項的值

s.getsockopt(level,optname[.buflen])

返回套接字選項的值

s.settimeout(timeout)

設定套接字操作的超時期,timeout是乙個浮點數,單位是秒,值為none表示沒有超時期;一般,超時期應該在剛建立套接字時設定,因為它們可能用於連線的操作(如connect())

s.gettimeout()

返回當前超時期的值,單位是秒,如果沒有設定超時期,則返回none

s.fileno()

返回套接字的檔案描述符

s.setblocking(flag)

如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(預設值);非阻塞模式下,如果呼叫recv()沒有發現任何資料,或send()呼叫無法立即傳送資料,那麼將引起socket.error異常

s.makefile()

建立乙個與該套接字相關連的檔案

python網路程式設計基礎

客戶 伺服器架構 伺服器 是乙個軟體或硬體,用於提供客戶需要的 服務 伺服器存在的唯一目的就是等待客戶的請求,給這些客戶服務,然後再等待其他的請求.常見的服務型別 硬體的客戶 伺服器架構 印表機,檔案伺服器 軟體客戶 伺服器架構 web伺服器,資料庫伺服器,視窗伺服器 gui 套接字 用於程序間通訊...

python 網路程式設計基礎

python實在是太方便,太易用了,三方庫的支援又全,語法又簡單,對開發人員來說,實在是居家旅行,x的必備利器。週末研究了下python的網路支援,做一下記錄,以備隨後翻閱。python支援bsd的socket進行網路程式設計,其api跟c中的大同小異,先看看tcp方式的,說到網路程式設計,肯定會設...

python網路程式設計基礎

目錄 標籤 空格分隔 網路程式設計 目錄tcp和udp tcp的使用是面向連線的,即資料的傳輸必須基於虛鏈路的完整建立。虛鏈路的建立提供了很多優秀的功能,比如確認重傳以保證資料的完整性,滑動視窗以保證資料傳輸的高效性,各類選項字段提供不同的可選功能。tcp的缺點是報頭大,因為需要包含比udp更多的功...