Python學習-網路程式設計
@
目錄引言
計算機網路是學習程式設計的基礎四大件,而網路協議則是計算機網路的基礎
TCP/IP 中有兩個具有代表性的傳輸層協議,分別是 TCP 和 UDP,本文將介紹下這兩者以及它們之間的區別。
網路
網路程式設計就是通過程式使不同主機上的軟體能夠通過網路進行通訊
IP
ip是用來在網路中標記一臺電腦的地址,在本地區域網內是唯一的。
埠
一臺電腦有一個ip,但是一臺電腦上有多個軟體,怎麼識別到不同軟體進行通訊,這時就需要埠,每個軟體的埠在本地主機上都是唯一的。
協議
有了ip有了埠,好比商家有了你家小區的地址,單元號,但是該採用什麼快遞,怎麼確保你收到貨這些並沒有確定,這時就需要商家-顧客有一個統一的規定對這些內容進行規定,這就是協議
所以,ip地址+協議+埠 三者結合才可以可以標識網路中的程序,並利用這個標識進行程序之間的通訊
TCP/IP網路模型
計算機與網路裝置要相互通訊,雙方就必須基於相同的方法。比如
- 如何探測到通訊目標
- 由哪一邊先發起通訊
- 使用哪種語言進行通訊
- 怎樣結束通訊
等等都需要事先確定規則。這種規則就是協議(protocol)
TCP/IP 是網際網路相關的各類協議族的總稱,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都屬於 TCP/IP 族內的協議。
UDP
socket(簡稱 套接字) 是程序間通訊的一種方式,通過socket函式,我們可以指定期望的通訊協議型別
函式 socket.socket 建立一個 socket,該函式帶有兩個引數
第一個引數指明瞭協議簇,目前支援5種協議簇,最常用的有AF_INET(IPv4協議)和AF_INET6(IPv6協議)
第二個引數指明套介面型別,主要有種型別可選:SOCK_STREAM(位元組流套介面)、SOCK_DGRAM(資料報套介面)和SOCK_RAW(原始套介面)
下面是UDP客戶端和伺服器之間通訊互動的時間線,相應的程式碼實現也是根據此框圖進行實現
from socket import * udp_socket = socket(AF_INET, SOCK_DGRAM) dest_addr = ('192.168.123.1', 8888) send_data = input('請輸入要傳送的資料:') udp_socket.sendto(send_data.encode('utf-8'), dest_addr) recv_data = udp_socket.recvfrom(1024) # 接收到的資料recv_data是一個元組 # 第1個元素是對方傳送的資料 # 第2個元素是對方的ip和埠 print(recv_data[0].decode('gbk')) print(recv_data[1]) udp_socket.close()
TCP
TCP協議,傳輸控制協議(英語:Transmission Control Protocol,縮寫為 TCP)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議
TCP通訊需要經過建立連線、資料傳送、終止連線三個步驟
下面是TCP客戶端和伺服器之間通訊互動的時間線,相應的程式碼實現也是根據此框圖進行實現
from socket import *
tcp_client = socket(AF_INET, SOCK_DGRAM)
server_ip = input('input server ip:')
server_port = input('input server port:')
tcp_client.connect((server_ip,server_port))
send_data = input('input send data:')
tcp_client.send(send_data)
tcp_client.send(send_data.encode("gbk"))
recvData = tcp_client.recv(1024)
print('接收到的資料為:', recvData.decode('gbk'))
tcp_client.close()