[英]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 support
的64bit
計算機上以32bit library support
32bit
模式(請查看-m32
gcc
參數) gcc
程序的。
不帶-m32
選項重新編譯它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.