如何检测select.select收到的数据为指定目的ip端口返回的
时间: 2024-03-13 08:42:50 浏览: 150
在使用 `select.select` 进行 IO 多路复用时,可以通过检查 `recvfrom` 函数返回的数据包的源 IP 和端口号是否与指定的 IP 和端口号相同来判断收到的数据是否为指定目的 IP 和端口号返回的。具体实现方式可以参考如下代码片段:
```python
import select
import socket
# 创建 UDP 套接字并绑定本地地址
local_addr = ('', 12345)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(local_addr)
# 设置要发送到的目的地址
dest_addr = ('127.0.0.1', 54321)
# 设置 select.select 监听的文件描述符列表
inputs = [sock]
while True:
# 等待文件描述符可读
readable, _, _ = select.select(inputs, [], [])
for r in readable:
if r is sock:
# 接收数据包并获取源 IP 和端口号
data, addr = sock.recvfrom(1024)
src_ip, src_port = addr
# 检查源 IP 和端口号是否为指定目的 IP 和端口号
if src_ip == dest_addr[0] and src_port == dest_addr[1]:
print('Received data from the specified destination:', data)
```
在上述代码中,我们首先创建一个 UDP 套接字并绑定本地地址,然后设置要发送到的目的地址为 `('127.0.0.1', 54321)`。接着,我们通过 `select.select` 监听套接字的可读事件,并在收到数据包时通过 `recvfrom` 函数获取源 IP 和端口号。最后,我们检查源 IP 和端口号是否为指定目的 IP 和端口号,如果是则打印收到的数据包内容。
阅读全文