我有一个简单的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客户端将数据包发送到A上的UDP服务器 我可以捕获这台机器上发送的数据包,但UDP服务器不接受这些数据包,
这有什么潜在的原因吗? 也许绑定在这里不起作用,因为这台机器很特别? 谢谢!
答案 0 :(得分:0)
最近的一些Linux发行版(例如Fedora)已将界面名称从ethX
更改为emX
,因此没有任何问题。
你遇到了这台机器的问题,因为服务器根本没有运行,因为这条线声称:
-bash: ./udp_server: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
我猜你已经在32bit
模式下编译了该程序(查看-m32
gcc
参数)64bit
机器中没有32bit library support
安装。
不使用-m32
选项重新编译它。