在收听来自stdin的C输入的同时收听UDP套接字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在收听来自stdin的C输入的同时收听UDP套接字相关的知识,希望对你有一定的参考价值。

所以我试图在C中创建一个程序,它可以通过UDP从另一台计算机接收数据包,同时也可以在有人在命令行中“退出”时停止监听。我的问题是fgets和recvfrom都等到事情发生了,所以如果我正在执行fgets,我的程序将忽略传入的消息,如果我正在等待消息,它将忽略对终端的输入。有什么方法可以同时做到这两件事吗?

相关守则:

while (strcmp(sendline, "quit")!=0) {

    fgets(sendline,MAXLINE,stdin);

    if((nbytes=recvfrom(sd,recvline,1+strlen(sendline),0,
        (struct sockaddr*)&sad, &fromlen))<0){
      perror("recvfrom");
      exit(1);
    }  
}
答案

如果切换到使用低级IO(从fd 0读取而不是从stdin读取fread),则可以使用select()函数通知fd或套接字上的数据何时就绪。

以上是关于在收听来自stdin的C输入的同时收听UDP套接字的主要内容,如果未能解决你的问题,请参考以下文章

使用 Android 收听广播

收听原始蓝牙键盘数据

android - 如何运行2个套接字到同一个IP和端口?

扭曲的UDP-为什么我不收听就无法发送?

在python中收听无限数量的套接字

重新加载页面时如何暂停收听ng Websocket?