1

シンプルな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 マシンでit( ./udp_server) を実行すると、正常に動作し、UDP クライアント クライアントを使用して、これらのマシンの UDP サーバーにパケットを送信すると、受け入れられます

しかし、私は新しいマシン(Aと呼びましょう)を 持っています.https: //superuser.com/questions/581442/ifconfig-command-not-foundに示されているように、他のLinuxマシンと比較して比較的奇妙 です。 「eth0」とインターフェイスは次のとおりです。

    [root@kitch 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 クライアントを使用して A の UDP サーバーにパケットを送信します。このマシンで送信されたパケットをキャプチャできますが、 UDP サーバーはそれらのパケットを受け入れません。

これには潜在的な理由がありますか?このマシンは特殊なため、ここでバインドが機能しない可能性がありますか? ありがとう!

4

1 に答える 1

0

最近の一部の Linux ディストリビューション (Fedora など) では、インターフェイスの名前が から に変更されているethXためemX、問題はありません。

この行が主張するように、サーバーがまったく実行されていないため、そのマシンで問題が発生しました。

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

プログラムがインストールされていないマシンで32bitモード(-m32 gccパラメータを見てください)でコンパイルしたと思います。64bit32bit library support

オプションなしで再コンパイルし-m32ます。

于 2013-04-11T14:48:42.900 に答える