簡體   English   中英

簡單的UDP服務器無法接受數據包

[英]simple UDP server can't accept packets

我有一個簡單的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”和接口是:

    [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客戶端將數據包發送到AI上的UDP服務器,可以捕獲此機器上的已發送數據包, UDP服務器不接受這些數據包,

有任何潛在的原因嗎? 也許綁定在這里不起作用,因為這台機器很特殊? 謝謝!

最近的一些Linux發行版(例如Fedora)已將接口的名稱從ethX更改為emX ,因此,它沒有任何問題。

您遇到了那台機器的問題,因為服務器根本沒有運行,如以下行所示:

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

我猜您是在沒有安裝32bit library support64bit計算機上以32bit library support 32bit模式(請查看-m32 gcc參數) gcc程序的。

不帶-m32選項重新編譯它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM