網路就是一種輔助雙方或者多方能夠連線在一起的工具
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)
說明:3) 建立乙個udp socket(udp套接字)socket.socket: 建立乙個socket,該函式帶有兩個引數:
addressfamily: 可以選擇af_inet(用於internet程序間通訊表示ipv4協議)或者af_inet6(表示ipv6協議未來很快可能用上)等
type: 套接字型別,可以是sock_dgram(資料報套接字,主要用於udp協議)或者sock_stream(流式套接字,主要用於tcp協議)等
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...