2013-04-11 56 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