为什么帮定不了IP?(100分)

  • 主题发起人 主题发起人 difilwy
  • 开始时间 开始时间
D

difilwy

Unregistered / Unconfirmed
GUEST, unregistred user!
linux编程问题:
我的机子上有3块网卡,分别对应三个IP(ip1,ip2,ip3),在程序中我建立三个udp server,分别帮定这三个ip(端口互不相同),其中一个server的建立如下:
bzero(&SinLeft,sizeof(SinLeft));
SinLeft.sin_family=AF_INET;
SinLeft.sin_addr.s_addr=inet_addr(ip1);/*htonl(INADDR_ANY)*/;
SinLeft.sin_port=htons(LockClientOrderLeftPort);
bzero(&(SinLeft.sin_zero),8);
sin_len=sizeof(SinLeft);
socket_Left=socket(AF_INET,SOCK_DGRAM,0);
setsockopt(socket_Left,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
if(socket_Left==-1) perror("Left Socket call error!/n");
ioctl(socket_Left,SIOCGIFHWADDR,&
ifr);
save_file_flags=fcntl(socket_Left,F_GETFL);
save_file_flags |=O_NONBLOCK;
fcntl(socket_Left,F_SETFL,save_file_flags);
bind_left=bind(socket_Left,(struct sockaddr *)&SinLeft,sizeof(SinLeft));
if(bind_left==-1) perror("Left IP bind call failed!/n");
其它的两个与此相同,可是建立后却收不到任何数据包(程序运行没有报错),如果将SinLeft.sin_addr.s_addr=inet_addr(ip1);/*htonl(INADDR_ANY)*/;改为SinLeft.sin_addr.s_addr=htonl(INADDR_ANY);,这样就能收到数据包,但是一次就会收到三个数据包(估计时每个网卡都收到一个),当然,这种做法是不可取的,因为必须做到一个server帮定一个ip才行,各位大侠:我的程序哪儿不对?为什么直接帮定地址就收不到数据包?怎么样才能直接帮定地址而且能够准确的收到数据包?谢谢!
 
ip1这个字符串你是怎么得到的,检查过了它的值吗?
 
to pipi:
我知道自己机器的IP,我直接给它赋值,我试过用gethostname取得ip,但是结果也一样,我怀疑是不是缺少别的设置?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
678
import
I
后退
顶部