【问题标题】:Why is this UDP client/server code not working?为什么这个 UDP 客户端/服务器代码不起作用?
【发布时间】:2014-05-11 02:25:55
【问题描述】:

我正在尝试尝试将单个 UDP 消息从一台机器发送到另一台机器。客户端是一个嵌入式 Linux 系统,通过调制解调器连接到互联网。没有防火墙。该服务器是我拥有的公共 VPS 服务器。尽管多次调用客户端,但服务器从未收到任何东西。谁能看出哪里出了问题?

客户:

int main(int argc, char**argv)
{
   int sockfd,n;
   struct sockaddr_in servaddr,cliaddr;
   char sendline[1000];
   char recvline[1000];

   if (argc != 2)
   {
      printf("usage:  udpcli <IP address>\n");
      exit(1);
   }

   sockfd=socket(AF_INET,SOCK_DGRAM,0);

   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr.s_addr=inet_addr(argv[1]);
   servaddr.sin_port=htons(32000);

      sendto(sockfd,"abcd", 4,0,
             (struct sockaddr *)&servaddr,sizeof(servaddr));
}           

服务器:

int main(int argc, char**argv)
{
   int sockfd,n;
   struct sockaddr_in servaddr,cliaddr;
   socklen_t len;
   char mesg[1000];

   sockfd=socket(AF_INET,SOCK_DGRAM,0);

   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
   servaddr.sin_port=htons(32000);
   bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

   for (;;)
   {
      len = sizeof(cliaddr);
      printf("calling recvfrom\n");
      n = recvfrom(sockfd,mesg,4,0,(struct sockaddr *)&cliaddr,&len);
      printf("-------------------------------------------------------\n");
      mesg[n] = 0;
      printf("Received the following:\n");
      printf("%s",mesg);
      printf("-------------------------------------------------------\n");
   }
}

【问题讨论】:

  • 尝试使用nc -u从您的电脑发送内容。你在服务器上有什么东西吗?
  • 不,那也没用。
  • 好的,现在关闭服务器进程并启动nc -u -l。回到你的电脑,再试一次nc -u。如果您没有看到任何东西,则很可能正在路上阻止该端口上的数据报。尝试多个端口,直到找到一个可以通过的端口。
  • 尝试了一堆不同的端口,但似乎都没有工作。可能是 VPS 提供商阻止了 UDP?
  • 可能是。尝试端口53,通常通过互联网。另外,你确定你有正确的参数 nc 吗?不想冒犯您,但也许可以在 localhost 上进行试用,以确保您正确使用您拥有的风味?

标签: linux networking udp


【解决方案1】:

问题似乎是我的 VPS 服务器上阻止了 UDP 流量。当我在嵌入式系统上重新运行服务器并在我的 Linux PC 上重新运行客户端时,它运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2010-11-12
    • 2021-03-29
    • 1970-01-01
    • 2018-09-13
    • 2016-12-10
    相关资源
    最近更新 更多