2013-04-11 57 views
1

我有一个简单的UDP服务器程序简单UDP服务器无法接收数据包

#include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <stdio.h> 
    #include <string.h> 


    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(54000); 
     bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); 

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

我编译

gcc -m32 -o udp_server udp_server.c 

,并在多种Linux机器上运行它(./udp_server),它工作正常,我使用UDP客户端客户端发送数据包到这些机器上的UDP服务器,他们被接受

但我有一台新机器(让我叫它A),它相对于其他Linux机器,如图https://superuser.com/questions/581442/ifconfig-command-not-found 反正它没有“eth0的”和接口:

[[email protected] proxy]# ip link show 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 
    link/ether 00:1a:a0:23:86:6c brd ff:ff:ff:ff:ff:ff 

首先,我在其上运行的程序的32位版本和我

-bash: ./udp_server: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 

然后,我编译没有'-m32'的UDP程序并在机器A上运行它,它运行正常 然后我使用UDP客户端向UDP服务器发送数据包A 我可以捕获此机器上发送的数据包,但UDP服务器不接受这些数据包,

是否有任何潜在的原因呢? 也许绑定不起作用,因为这台机器是特殊的? 谢谢!

回答

0

一些最近的Linux发行版(例如Fedora)已将接口名称从ethX更改为emX,所以没有任何问题。

你与机器因为该行声称,服务器没有运行在所有有问题:

-bash: ./udp_server: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 

我想你已经在32bit模式编译的程序(看-m32gcc参数)在没有安装32bit library support64bit机器中。

重新编译它没有-m32选项。

+0

我试了两种,在我看来,32位机器应该在机器A中工作,但为什么它不能?那么我编译它,我成功运行'。/ udp_server',只是它不能接受UDP数据包。 – misteryes 2013-04-11 14:52:48

+0

你怎么能说它运行成功?没有32位解释器,它不能运行 – 2013-04-11 14:56:47

+0

我的意思是尝试了2个版本。我在机器A上没有'-m32'选项编译,然后它运行成功,但它不能接受UDP数据包 – misteryes 2013-04-11 14:58:44