python 網路程式設計

2021-09-24 19:55:18 字數 3920 閱讀 7876

網路就是一種輔助雙方或者多方能夠連線在一起的工具

ip位址127.0.0.1~127.255.255.255用於迴路測試, 127.0.0.1代表本機ip位址

如果乙個程式需要收發網路資料,那麼就需要有這樣的埠

在linux系統中,埠可以有65536(2的16次方)個之多!

檢視埠

netstat -an

埠作用

通過 「ip位址 + 埠號」區分不同的服務

總而言之,ip位址標識網路中的一台主機,埠號標識這台主機上的乙個服務(應用程式)

1) 什麼是socket

2) 建立socket

在python中使用socket模組的函式socket就可以完成:

import socket

socket.socket(addressfamily, type)

說明:

socket.socket: 建立乙個socket,該函式帶有兩個引數:

addressfamily: 可以選擇af_inet(用於internet程序間通訊表示ipv4協議)或者af_inet6(表示ipv6協議未來很快可能用上)等

type: 套接字型別,可以是sock_dgram(資料報套接字,主要用於udp協議)或者sock_stream(流式套接字,主要用於tcp協議)等

3) 建立乙個udp socket(udp套接字)
import socket

# 建立udp的套接字

s = socket.socket(socket.af_inet, socket.sock_dgram)

# ...這裡是使用套接字的功能(省略)...

# 不用的時候,關閉套接字

s.close(

)

4) 建立乙個tcp socket(tcp套接字)
import	socket

# 建立tcp的套接字

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

# ...這裡是使用套接字的功能(省略)...

# 不用的時候,關閉套接字

s.close(

)

說明:

套接字使用流程與檔案的使用流程很類似

建立套接字

使用套接字收/發資料

關閉套接字

建立乙個基於udp的網路程式流程很簡單,具體步驟如下:

建立客戶端套接字

傳送/接收資料

關閉套接字

其中decode()與encode()方法可以接受引數,其宣告分別為:

bytes.decode(encoding=「utf-8」, errors=「strict」)

str.encode(encoding=「utf-8」, errors=「strict」)

encoding是指在解碼/編碼(動詞)過程中使用的字元編碼(名詞)

errors是指錯誤的處理方案,errrors引數預設值是strict(嚴格的)意味著如果編譯碼出錯將會丟擲

unicodeerror;

如果想忽略編譯碼錯誤可以將errors設定為ignore。

from socket import

*def

send_msg

(udp_socket)

: udp_socket.sendto(

input

("請輸入要傳送的資料"

).encode(

"utf-8"),

("",8888))

defrecv_msg

(udp_socket)

: recv = udp_socket.recvfrom(

1024

) recv_data = recv[1]

recv_socket = recv[0]

print

(recv_data, recv_socket)

defmain()

: udp_socket = socket(af_inet, sock_dgram)

udp_socket.bind((""

,9999))

while

true

: choose_num =

input

("請輸入功能: 1.接收資料, 2.傳送資料"

)if choose_num ==

"2":

send_msg(udp_socket)

elif choose_num ==

"1":

recv_msg(udp_socket)

else

:print

("輸入有誤,請重新輸入"

)if __name__ ==

'__main__'

: main(

)

tcp協議 : 傳輸控制協議(transmission control protocol)

一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議

tcp伺服器一般情況下都需要繫結,否則客戶端找不到這個伺服器

tcp客戶端一般不繫結,因為是主動鏈結伺服器,所以只要確定好伺服器的ip、port等資訊就好,本

地客戶端可以隨機

tcp伺服器中通過listen可以將socket建立出來的主動套接字變為被動的,這是做tcp伺服器時必須要

做的當客戶端需要鏈結伺服器時,就需要使用connect進行鏈結,udp是不需要鏈結的而是直接傳送,但

是tcp必須先鏈結,只有鏈結成功才能通訊

當乙個tcp客戶端連線伺服器時,伺服器端會有1個新的套接字,這個套接字用來標記這個客戶端,

單獨為這個客戶端服務

listen後的套接字是被動套接字,用來接收新的客戶端的連線請求的,而accept返回的新套接字是標

識這個新客戶端的

關閉listen後的套接字意味著被動套接字關閉了,會導致新的客戶端不能夠鏈結伺服器,但是之前

已經鏈結成功的客戶端正常通訊。

關閉accept返回的套接字意味著這個客戶端已經服務完畢

當客戶端的套接字呼叫close後,伺服器端會recv解阻塞,並且返回的長度為0,因此伺服器可以通

過返回資料的長度來區別客戶端是否已經下線;同理 當伺服器斷開tcp連線的時候 客戶端同樣也會

收到0位元組資料。

計算機都遵守的網路通訊協議叫做tcp/ip協議

網際層也稱為: 網路層

網路介面層也稱為: 鏈路層

以tcp的方式傳送http協議的請求資料給伺服器

伺服器tcp的方式回應http協議的應答資料 給瀏覽器

http: 超文字傳輸協議(hypertext transfer protocol) 是一種應用層協議

html是一種用來定義網頁的文字

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 網路程式設計

今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...

python網路程式設計

網路通訊是計算機之間的程序之間的通訊。tcp程式設計 tcp連線建立是雙向通道,客戶端與服務端都可以給對方傳送資料。建立tcp連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。建立乙個tcp的socket連線 用socket family,type 建立套接字獲得socket物件。family...