我有一個簡單的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服務器不接受這些數據包,
是否有任何潛在的原因呢? 也許綁定不起作用,因爲這臺機器是特殊的? 謝謝!
我試了兩種,在我看來,32位機器應該在機器A中工作,但爲什麼它不能?那麼我編譯它,我成功運行'。/ udp_server',只是它不能接受UDP數據包。 – misteryes 2013-04-11 14:52:48
你怎麼能說它運行成功?沒有32位解釋器,它不能運行 – 2013-04-11 14:56:47
我的意思是嘗試了2個版本。我在機器A上沒有'-m32'選項編譯,然後它運行成功,但它不能接受UDP數據包 – misteryes 2013-04-11 14:58:44