为什么这个UDP客户端/服务器代码不起作用?

时间:2014-05-10 17:27:10

标签: linux networking udp

我尝试尝试从一台计算机向另一台计算机发送单个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");
   }
}

1 个答案:

答案 0 :(得分:1)

问题看起来是我的VPS服务器上阻止了UDP流量。当我在Linux PC上重新运行嵌入式系统和客户端上的服务器时,它工作正常。