簡單來說,網路是用物理鏈路將各個孤立的工作站或主機相連在一起,組成資料鏈路,從而達到資源共享和通訊的目的。
使用網路的目的,就是為了聯通多方然後進行通訊,即把資料從一方傳遞給另外一方。
前面的學習編寫的程式都是單機的,即不能和其他電腦上的程式進行通訊。為了讓在不同的電腦上執行的軟體,之間能夠互相傳遞資料,就需要借助網路的功能。
使用網路能夠把多方鏈結在一起,然後可以進行資料傳遞
所謂的網路程式設計就是,讓在不同的電腦上的軟體能夠進行資料傳遞,即程序之間的通訊
socket(簡稱 套接字) 是程序間通訊的一種方式,它與其他程序間通訊的乙個主要不同是:
它能實現不同主機間的程序間通訊,我們網路上各種各樣的服務大多都是基於 socket 來完成通訊的
例如我們每天瀏覽網頁、qq 聊天、收發 email 等等。所以socket在網路通訊的時候是很重要的。
在python中我們可以直接匯入socket這個模組來建立
import socket
socket.socket()
這樣我們也就建立好了乙個socket連線,但是裡面還有兩個引數
建立套接字連線主要有三步:今天我們也主要來講udp協議1、建立套接字
2、使用套接字來進行收、發資料
3、關閉套接字
udp 是user datagram protocol的簡稱, 中文名是使用者資料報協議。在通訊開始之前,不需要建立相關的鏈結,只需要傳送資料即可,類似於生活中,「寫信」。
#首先匯入socket模組
import socket
# 1、建立套接字
# socket.af_inet(用於internet之間通訊) socket.sock_dgram(用於udp協議)
udp_socket = socket.socket(socket.af_inet, socket.sock_dgram)
#2、使用套接字來進行接收和傳送訊息
#3、關閉套接字
udp_socket.close()
傳送資料主要使用的是sendto(data: bytes, address: _address),這個方法需要兩個引數:
import socket
# 1、建立套接字
udp_socket = socket.socket(socket.af_inet, socket.sock_dgram)
#2、使用套接字來進行傳送資料
udp_socket.sendto('你好'.encode('utf-8'),('192.168.0.102',8989))
#3、關閉套接字
udp_socket.close()
上面就是乙個udp協議傳送資料的過程,在這裡主要注意的地方是傳送資料的時候,要進行乙個編碼,我們要把傳送的資料轉換成乙個二進位制數
在進行測試的時候,我們可以借助乙個網路除錯助手
來進行練習
開啟這個網路除錯助手
後,我們先在左上方進行繫結埠,然後執行程式,這樣就可以接收到資料了
在進行接收資料的時候,我們要先進行埠的繫結,因為在別人給我們傳送資料的時候,需要有乙個ip位址和埠,這樣才可以準確的把資訊傳送給我們
import socket
# 1、建立套接字
udp_socket = socket.socket(socket.af_inet, socket.sock_dgram)
# 2、繫結埠
udp_socket.bind(('',9090))
#3、使用套接字來進行接收資料
recv_data = udp_socket.recvfrom(1024)
print(recv_data)
#3、關閉套接字
udp_socket.close()
在接收資料的時候,我們用的是recvfrom()
這個方法,在這個方法裡面有乙個1024
,表示一次可以接收1024個位元組,這個方法接收到資料之後會有乙個返回值,這個返回值是乙個元組的形式,元組的第乙個元素是傳送方傳送的資料,第二個元素是傳送方的ip位址和埠號
我在執行程式之後,你會發現程式是一種阻塞
的狀態,是因為recvfrom()
這個方法一直在等待傳送方給我們傳送資料
當我們使用網路除錯助手
給9090這個埠傳送資料之後,那邊會立即收到資料並列印,但是細心的也會發現列印出來的資料是乙個二進位制的形式,而我們傳送的是「你好」,這是因為編碼所導致的,這個時候我們就需要用decode()
這個方法來進行轉碼
因為我傳送方傳送的是gbk
形式的編碼,所以我也需要轉換成gbk
形式
recv_data,recv_addr = udp_socket.recvfrom(1024)
print(recv_data.decode('gbk'),recv_addr)
在接收資料的時候,我使用了拆包
來進行接收資料,然後我們執行再列印看看
這個時候就可以正常顯示了
python 網路程式設計學習 套接字socket
以前也學過套接字程式設計,這次想系統全面的學習下python網路程式設計的使用。做這個,為檢測進度,也為後續留下筆記和足跡。socket 常用函式 socket.gethostname socket.gethostbyname import socket host socket.gethostnam...
Python網路程式設計學習筆記一 socket模組
coding utf 8 主要測試python網路程式設計中socket模組的使用 涉及到的技術點 套接字 面向連線的還有非面向連線套接字 tcp面向連線 udp非面向連線 1 匯入socket 2 建立socket socket三要素 1 socket family,2 socket type 3...
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...