Python網路程式設計——IP、UDP
Python網路程式設計 —— IP、UDP
IP
ip地址: 在網路中標識一臺唯一的裝置
ip地址的作用: 通過ip地址在網路中找到對應的裝置,然後可以給這個裝置傳送資料
ip地址分為:ipv4 ipv6
域名:方便記憶某臺電腦的主機地址,域名能解析出來一個ip地址(DNS解析)
ping 127.0.0.1 能ping通即代表電腦網路卡沒有問題,網路正常就能上網
網路通訊流程:
通過ip地址找到對應的裝置(電腦,手機等),然後通過埠號找到埠,再通過埠給應用程式傳送資料
埠號分為知名埠號和動態埠號(知名埠號是系統使用的,動態埠號是程式設計師設定使用的)
知名埠號:範圍從0-1023
動態埠範圍:1024-65535 ,當程式關閉時,同時也就釋放了所佔用的埠號
檢視埠號:netstat -an
檢視埠號被哪個程式佔用: lsof -i[tcp/udp]:埠號 (找不到時,使用管理員許可權,加sudo)
根據程式編號殺死指定程式:kill -9 程式號
UDP
概念:英文全拼(User Datagram Protocol)簡稱使用者資料包協議,它是無連線的、不可靠的網路傳輸協議
面向無連線型:無需確認對端是否存在,傳送端可隨時傳送資料(udp網路傳輸協議好比現實生活中寫信)
UDP特點:
無連線、資源開銷小、傳輸速度快、UDP每個資料包最大是64K
UDP優點:
傳輸速度快
不需要連線,資源開銷小
UDP缺點:
傳輸資料不可靠,容易丟失資料包
沒有流量控制,當對方沒有及時接收資料,傳送方一直髮送資料會導致緩衝區資料滿了,電腦出現卡死情況,所以接收方需要及時接收資料
socket
程式:執行的程式或者軟體稱之為程式
程式通訊:執行的程式之間的資料共享
socket:簡稱:套接字,是程式間通訊的一個工具,它能實現把資料從一方傳輸到另外一方,完成不同電腦上程式之間的通訊
使用場景:只要和網路相關,幾乎都需要使用socket
UDP網路程式
UDP網路程式流程
1.建立socket套接字
2.傳送/接收資料
3.關閉套接字
建立socket 傳送資料
在Python中使用socket模組的函式socket
import socket
# 判斷是否是主模組,判斷是否是程式入口
if __name__ == "__main__":
# 建立UDP套接字
# 1. ip地址的型別:AF_INET: ipv4, AF_INET6: ipv6
# 2. 傳輸協議型別:SOCK_DGRAM:udp協議
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 準備資料
send_content = "學習socket,很開心"
# 把字串編碼成為二進位制資料
send_data = send_content.encode("utf-8")
# 傳送資料
udp_socket.sendto(send_data,(`192.168.138.50`,8080))
# 關閉套接字
udp_socket.close()
建立socket 接收資料
import socket
if __name__ == "__main__":
# 建立udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 準備傳送的資料
send_content = "測試測試"
# 對資料進行編碼,把字串轉成對應的二進位制資料
send_data = send_content.encode("gbk")
# 傳送資料
udp_socket.sendto(sned_data,("192.168.138.50", 8080))
# 接受資料,1024表示:每次接收資料的最大位元組數
recv_data, ip_port = udp_socket.recvfrom(1024)
# 對二進位制資料進行解碼
# sep : 指定資料的分隔符
recv_content = recv_data.decode("gbk")
print(recv_content, ip_port, sep="&")
# 關閉
udp_socket.close()
udp繫結埠號
udp 繫結資訊:一般情況下,在一臺電腦上執行的網路程式有很多,為了不與其他的網路程式佔用同一個埠號,往往在程式設計中,udp的埠號一般不繫結
但是如果需要做成一個服務端的程式的話,是需要繫結的
繫結埠號:
import socket
if __name__ == "__main__":
# 建立udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 繫結埠號, "" : 表示本機的任意IP地址,可以解決電腦上多個網路卡都能收到資料
udp_socket.bind("", 9090)
# 傳送資料
udp_socket.sendto("哈哈".encode("gbk"),("192.168.138.50", 8080))
# 接收資料
recv_data, ip_port = udp_socket.recvfrom(1024)
# 把二進位制資料進行解碼
recv_content = recv_data.decode("gbk")
print(recv_content, ip_port)
# 關閉套接字
udp_socket.close()
UDP 傳送廣播訊息
import socket
if __name__ == "__main__":
# 建立udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 1.SQL_SOCKET:當前套接字
# 2.SO_BROADCAST :廣播選項
# 3.True :是否開啟廣播選項
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
# 傳送資料
udp_socket.sendto("你好".encode("gbk"), ("192.168.138.50", 8989))
# 關閉套接字
udp 聊天器
需求:
在一個電腦中編寫一個程式,有兩個功能
1.獲取鍵盤資料,並將其傳送給對方
2.接受資料並顯示
import socket
if __name__ == "__main__":
# 建立udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 接收使用者的功能選項
menu_option = input("請輸入功能選項 1.傳送資料 2.接收資料 3.退出:")
while True:
if menu_option == "1":
# 獲取使用者傳送的資料
send_content = input("請求輸入您要傳送的資料:")
# 獲取對方的IP地址
dest_ip = input("請輸入對方的ip地址:")
# 獲取對方的埠號
dest_port = input("請輸入對方的埠號:")
# 把字串進行gbk編碼
send_data = send_content.encode("gbk")
# 傳送資料
udp_socket.sendto(send_data,(dest_ip,int(dest_port)))
elif menu_option == "2":
# 接收資料
recv_data, ip_port = udp_socket.recvfrom(1024)
# 對二進位制資料進行解碼
recv_content = recv_data.decode("gbk")
print(recv_content, ip_port)
elif menu_option == "3":
break
else:
print("請按提示操作!")
# 關閉套接字
udp_socket.close()
歡迎訪問
個人部落格地址:www.limiao.tech
相關文章
- 網路程式設計-UDP程式設計UDP
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- UDP&TCP Linux網路應用程式設計詳解UDPTCPLinux程式設計
- Java網路程式設計之UDPJava程式設計UDP
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- python UDP程式設計是什麼意思?PythonUDP程式設計
- python 網路篇(網路程式設計)Python程式設計
- Java&Python的TCP&UDP通訊-網路程式設計JavaPythonTCPUDP程式設計
- 網路程式設計中TCP與UDP程式設計TCPUDP
- 網路程式設計UDP協議方式程式設計UDP協議
- 【網路程式設計】TCPIP-5-UDP程式設計TCPUDP
- 網路程式設計之 Udp接收資料程式設計UDP
- 網路程式設計原理與UDP實現程式設計UDP
- Java網路程式設計UDP通訊原理Java程式設計UDP
- 基於UDP程式設計UDP程式設計
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- Java網路程式設計--UDP傳送接收資料Java程式設計UDP
- Python網路程式設計——程式Python程式設計
- 網路程式設計TCP/IP詳解程式設計TCP
- UDP網路測試UDP
- udp網路通訊UDP
- 計算機網路之六:UDP協議計算機網路UDP協議
- 計算機網路再次整理————UDP例子[六]計算機網路UDP
- Python 網路資料傳輸協議 TCP 程式設計Python協議TCP程式設計
- 網路通訊程式設計程式設計
- py網路工具程式設計程式設計
- python:socket網路程式設計Python程式設計
- TCP/IP、UDP/IP協議TCPUDP協議
- 好程式設計師Python培訓分享Python之初識網路爬蟲程式設計師Python爬蟲
- 《UNIX網路程式設計》筆記 - 套接字選項/UDP套接字程式設計筆記UDP
- Go語言中的TCP/IP網路程式設計GoTCP程式設計
- 好程式設計師Python培訓分享udp和tcp協議介紹程式設計師PythonUDPTCP協議
- 網路通訊1:UDPUDP
- [計算機網路]TCP/IP計算機網路TCP
- Android程式設計師必知必會的網路通訊傳輸層協議——UDP和TCPAndroid程式設計師協議UDPTCP