用Python发送UDP数据包

今天,我们将学习用户数据报协议(UDP),看看我们如何使用Python编程来发送UDP数据包。

在Python中发送UDP数据包

用户数据报协议 (UDP) 和 TCP/IP 的操作方式不同。UDP是一个面向消息的协议,与TCP相反,后者是一个面向流的协议,确保所有数据按正确的顺序传输。

设置UDP套接字要容易一些,因为UDP不需要持续很长时间的连接。另一方面,与TCP不同,UDP消息的传递没有保证,它们必须适合在一个数据包中。

我们怎样才能在Python中做到这一点呢?Python 有一个内置的模块叫socket ,你必须导入。

import socket

一旦我们导入了socket 模块,我们必须说明我们将尝试发送 UDP 消息的端口号和 IP 地址。

IP = "127.0.0.1"
PORT = 5003
Message = "Info"

现在是时候建立socket ,我们将通过它向服务器发送我们的UDP消息,现在我们已经说明了这几个变量。

Sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Sock.sendto(Message, (IP,PORT))

你必须创建两个文件;client.pyserver.py 。客户端和服务器文件都必须在相应的服务器和客户端系统中。

一旦创建了客户端程序,下一步就是制作服务器程序,它将监视指定的IP地址和端口号的任何UDP数据包。

注意,客户端的Python脚本必须在这个服务器之前执行,否则,客户端的Python脚本将失败。

一旦我们导入了socket 模块并提供了我们的 IP 地址和端口号,我们就可以创建另一个socket ,它将与我们在客户端程序中制作的socket 完全相似。

Server.py 文件的示例代码:

import socket
IP = "127.0.0.1"
PORT = 5003
MESSAGE= "The meeting is From 10 pm."
print(f"sending information")
print(f"{MESSAGE} to {IP}:{PORT}")
sock = socket.socket(socket.AF_INET,
                     socket.SOCK_DGRAM)
sock.sendto(MESSAGE.encode(), (IP, PORT))

输出:

sending information
The meeting is From 10 pm. to 127.0.0.1:5003

你还应该写一些代码来维持你的脚本持续地监听这个连接,直到你建立了你的服务器socket ,它就会终止。

它的形式是一个简单的while 循环,如下图所示:

Client.py 文件的代码示例:

import socket
IP = "127.0.0.1"
PORT = 5003
sock = socket.socket(socket.AF_INET,
                     socket.SOCK_DGRAM)
sock.bind((IP, PORT))
print(f"start listening to {IP}:{PORT}")
while True:
    data, addr = sock.recvfrom(1024)
    print(f"received message: {data}")

输出:

start listening to 127.0.0.1:5003
received message: The meeting is From 10 pm.

通过这种方式,我们可以在Python中发送UDP数据包。