打开 2 个相邻的 UDP 临时端口
Open 2 Adjacent UDP Ephemeral Ports
怎么可能编写一个打开两个相邻端口的函数。例如,第一次可能需要端口 1234 和 1235,下一次调用可能需要 5678 和 5677,依此类推。
我遇到的问题是,如果我先使用一个临时端口,我无法保证是否使用相邻端口中的任何一个。因此,解决方案是在循环中获取一个临时端口,不断尝试使用相邻端口,直到找到一个端口。
采用随机端口与临时端口具有相同的问题。
如果我不断添加一个尝试使用端口的端口,我在哪里停止和开始,什么时候停止搜索?
有没有一种快速的方法来测试两个端口是否打开,最好不必先打开它们。我宁愿有一个独立于操作系统的解决方案,但是如果我必须为每个操作系统编写一个解决方案,那很好。
通常,当您打开套接字并连接到服务器或发送 UDP 数据报时,操作系统会打开下一个可用端口作为临时端口。但是,您不能信任这一点,这取决于许多因素,包括其他应用程序打开套接字、操作系统实现等。
如果要打开相邻的套接字,则需要在发送数据报之前绑定套接字。
代码将是这样的:
#include <sys/socket.h>
...
int main() {
int ret;
int fd[65536];
struct sockaddr_in myaddr;
uint16_t port = 10000;
for(int i = 1; i < 65536; i++)
{
fd[i] = socket(AF_INET, SOCK_DGRAM, 0);
if (fd[i] < 0) exit(1);
// Local
memset(&myaddr, 0, sizeof(struct sockaddr_in));
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(i);
myaddr.sin_addr.s_addr = inet_addr(MY_IP_ADDRESS);
ret = bind(fd[i], (struct sockaddr *)&myaddr, sizeof(struct sockaddr));
...
}
...
return 0;
}
相关文章:
- 从udp接收帧对于人脸识别来说太慢
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 问:如何使用C++中的按钮从窗口打开窗口
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 无法打开.txt文件
- 如何打开并写入一个名称取自C++中字符串的文件
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 错误-我无法在VS2019中打开新的Qt项目
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- SFML RenderWindow打开窗口需要很长时间
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- C++程序打开时立即运行的代码
- 在 C/C++ 中打开驻留在 "/sys/" 下的文件时出错
- 如何在 2 台主机之间保持 UDP 套接字连接打开
- 正在打开带有临时端口的Boost.Asio UDP套接字
- 如何打开 UDP 端口
- 打开 2 个相邻的 UDP 临时端口
- 正在C++中检查打开的 UDP 端口