Python實現網路程式設計

2021-09-24 13:29:04 字數 3397 閱讀 3523

1、客戶端/服務端架構

在伺服器響應客戶端請求之前,必須進行一些初步的設定流程來為之後的工作做準備。

首先會建立乙個通訊端點(套接字),他能夠使伺服器監聽請求;可以把伺服器比作公司的總機接線員。

然後監聽伺服器進入無限迴圈中,等待客戶連線並響應其請求。

同樣,客戶端也需要建立乙個單一通訊端點,然後與伺服器建立連線,接著傳送請求,一旦請求被伺服器處理,且客戶端收到結果或某種確認資訊,此次通訊就會終止。

2、套接字基礎知識

af_inet套接字是基於網路的。還有af_unix、af_netlink、af_tipc

有面向連線的套接字sock_stream,和無連線的套接字sock_dgram

3、socket模組

建立套接字要用到socket()函式,他的一般語法是:socket(socket_family,socket_type)

前提是from socket import *

tcpsocket = socket(af_inet,sock_stream)
udpsocket = socket(af_inet,sock_ddram)
from socket import

*host =

'192.168.120.60'

port =

21375

bufsize =

1024

addr =

(host,port)

#建立tcp套接字

tcpsocket = socket(af_inet,sock_stream)

#繫結位址

tcpsocket.bind(addr)

#監聽連線

tcpsocket.listen(5)

#最大連線數為5

#伺服器無限迴圈接收訊息

while

true

:print

("waitting for connection..."

) clientsocket,address = tcpsocket.accept(

)print

("connected from "

,address)

while true:

data = clientsocket.recv(bufsize)

ifnot data:

print

("opposite side interrupts"

)break

else

: clientsocket.send(

"success"

.encode())

clientsocket.close(

)tcpsocket.close(

)

建立客戶端

from socket import

*host =

'192.168.120.60'

port =

21375

bufsize =

1024

addr =

(host,port)

#建立客戶端套接字

clientsocket = socket(af_inet,sock_stream)

#連線伺服器

clientsocket.connect(addr)

while

true

: data =

input

('>>>')if

not data:

break

clientsocket.send(data.encode())

response = clientsocket.recv(bufsize)

print

(response)

clientsocket.close(

)

tips:

typeerror: a bytes-like object is required, not 'str'

在send和recv函式中,都只支援bytes的格式,當我啟用客戶端,並在鍵盤上輸入字串後,如果不encode一下就會出現上述錯誤。

例項二:

建立udp伺服器

udp不需要監聽,不需要接收連線,直接等待客戶端的訊息recvfrom,然後返回響應sendto

from socket import

*host =

'192.168.120.60'

port =

21375

bufsize =

1024

addr =

(host,port)

#建立udp套接字

udpsocket = socket(af_inet,sock_dgram)

#繫結位址

udpsocket.bind(addr)

#伺服器無限迴圈接收訊息

while

true

:print

("waitting for message..."

) data,addr = udpsocket.recvfrom(bufsize)

udpsocket.sendto(

"success"

.encode(

),addr)

print

("received from and returned to:"

,addr)

udpsocket.close(

)

建立客戶端

from socket import

*host =

'192.168.120.60'

port =

21375

bufsize =

1024

addr =

(host,port)

#建立客戶端套接字

clientsocket = socket(af_inet,sock_dgram)

while

true

: data =

input

('>>>')if

not data:

break

clientsocket.sendto(data.encode(

),addr)

response,address = clientsocket.recvfrom(bufsize)

print

(response)

clientsocket.close(

)

python網路程式設計 實現路由記錄

首先檢視路由記錄如何執行的,那麼先用gns3搭建乙個簡易網路環境 設定好動態路由解析後開始檢視 抓包分析 最大記錄九個,其中第乙個是自己的ip 傳送 接收 ok開始用python寫路由記錄功能 思路 眾所周知ping是基於icmp協議的 1.傳送icmp資料報,在ip報頭option中新增自己的ip...

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...

網路程式設計 python實現 UDP(1 1 2)

internet 協議集支援乙個無連線的傳輸協議,該協議稱為使用者資料報協議 udp,user datagram protocol udp 為應用程式提供了一種無需建立連線就可以傳送封裝的 ip 資料報的方法。rfc 768 1 描述了 udp。internet 的傳輸層有兩個主要協議,互為補充。無...