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 的傳輸層有兩個主要協議,互為補充。無...