为什么关闭初始程序后在ncat上看不到UDP?
Why can't I see UDP on ncat after closing the initial program?
我有一个简短的程序,可以将UDP数据发送到So的本地套接字。
const char *i = "localhost";
const char *p = "8980";
struct addrinfo h;
struct addrinfo *res = 0;
memset(&hints,0,sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = 0;
hints.ai_flags = AI_ADDRCONFIG;
if (getaddrinfo(i, p, &hints, &res) != 0)
{
printf("ERROR: getaddinfon");
}
int fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (fd == -1)
{
printf("ERROR: socketn");
freeaddrinfo(res);
}
if (sendto(fd, "hello", 5, 0, res->ai_addr, res->ai_addrlen) == -1)
{
printf("ERROR: Sendingn");
}
freeaddrinfo(res);
close(fd);
我已经在带有ncat -ul localhost 8980
的不同终端窗口中启动了NCAT,随后启动上述程序时,我可以在其中看到" Hello"。我还可以对sendto
进行重复的呼叫,并多次查看Hello。该程序终止,但是当我重新发布发送程序时,我在NCAT上看不到其他" Hello"消息。为什么这是?
我也尝试在程序结束时也没有调用close
。
问题是,每次运行程序时,都会从其他端口发送数据,因此被视为不同的网络端点。当ncat
时首先收到一个数据包,它将绑定到远程端点,并停止收听来自任何其他端点的数据包。
您可以使用-k
选项与ncat
一起使用。可悲的是,执行UDP时,ncat
的-k
选项只能与-e
或-c
选项一起使用。您可以使其使用:
ncat -ulkc "cat > $(tty)" localhost 8980
它仍将绑定到每个远程端点,但它从中得到任何东西,因此它将起作用的次数有一个限制(默认100,可通过-m
选项配置(。
如果您使用nc
,请容易一些。这是-k
选项通常与-u
合作:
nc -ulk localhost 8980
完全可以防止nc
绑定到远程端点,因此它没有与ncat
相同的限制。
相关文章:
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 看不到文件'SDL2.lib'
- WSL 看不到环境变量
- 为什么我的 FreeRTOS 任务看不到类成员?
- Google Colab 看不到 .so 文件
- 派生类看不到基类成员
- 为什么我看不到字符串?
- CMake 看不到SDL2_PATH环境变量 (Windows)
- OpenMP 任务看不到共享变量的更改
- handleMessage看不到我的类和函数
- 为什么 connect() 函数看不到插槽?
- 模板类看不到继承的模板成员
- 为什么即使链接器找到目标文件,我的程序也看不到函数定义?
- 将 somedialog.h 包含在项目的其他部分中会使编译器看不到 ui_somedialog.h
- SFML - 代码::块看不到 sfml 图形(等)文件
- CMake 看不到源文件,找不到 #includes
- ifstream在OSX上看不到新内容
- C++概念看到我的类型的函数,但看不到 std::vector 的函数
- unique_ptr看不到派生类的自定义构造函数
- 为什么关闭初始程序后在ncat上看不到UDP?