python網路程式設計 socket udp協議

2021-10-03 07:27:26 字數 3169 閱讀 2301

簡單來說,網路是用物理鏈路將各個孤立的工作站或主機相連在一起,組成資料鏈路,從而達到資源共享和通訊的目的。

使用網路的目的,就是為了聯通多方然後進行通訊,即把資料從一方傳遞給另外一方。

前面的學習編寫的程式都是單機的,即不能和其他電腦上的程式進行通訊。為了讓在不同的電腦上執行的軟體,之間能夠互相傳遞資料,就需要借助網路的功能。

使用網路能夠把多方鏈結在一起,然後可以進行資料傳遞

所謂的網路程式設計就是,讓在不同的電腦上的軟體能夠進行資料傳遞,即程序之間的通訊

socket(簡稱 套接字) 是程序間通訊的一種方式,它與其他程序間通訊的乙個主要不同是:

它能實現不同主機間的程序間通訊,我們網路上各種各樣的服務大多都是基於 socket 來完成通訊的

例如我們每天瀏覽網頁、qq 聊天、收發 email 等等。所以socket在網路通訊的時候是很重要的。

在python中我們可以直接匯入socket這個模組來建立

import socket

socket.socket()

這樣我們也就建立好了乙個socket連線,但是裡面還有兩個引數

建立套接字連線主要有三步:

1、建立套接字

2、使用套接字來進行收、發資料

3、關閉套接字

今天我們也主要來講udp協議

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...