由于设备是冗余的,程序需要对本机器的两块网卡操作。
解决方案 »
- 采用UDP同时接收多台主机上数据的方法?
- 100分求教:如何在运行全屏游戏的时候,显示消息,而不使游戏切换出去
- JavaScript无法调用VC++制作的有句柄参数的ActiveX控件中的函数......
- MFC单/多文档有什么区别
- 数据类型转换?
- 延时方法?急!!1
- Release可以转化到debug吗?
- 利用WinSock进行有连接的通信时候,如何如同QQ一样能够接收对方发过的消息?
- SetViewportExt和SetViewportOrg运行出错
- 都说看源码是学习和提高编程能力的最好途径,但怎样才能够读懂vc的源码呢!!??
- 送分送分,大家来讨论下这个图像问题吧.我想不通怎么会这样的.
- 请教:怎么样才能做好一个服务器程序
具体说说。
总结如下
1.INADDR_ANY能够识别应该用那个网卡发送才会成功,但是两个网络同属以太网的话,它会选择一个比较后面的网卡,也就是最后启动的网卡.
2.bind地址,在sendto中好像没有什么作用,在send中可以有实现效果,前提是用raw socket.所以建议用启动先后的办法来处理两个不同网卡,不过一般情况下用INADDR_ANY都可以了,
微软的高度封装开发接口,使网络开发在windows下特别困难,这个大家是知道的,例如raw socket 的种种限制,和内核驱动TDI的RAWIP限制基本上扼杀了纯网络层的开发,前段时候看SPI也发现没有钥匙的大门,那就是微软~~~~~~
汗ing
void GetAdapterIPList(CStringArray *arIP)
{
WSAData wa;
int nRlt = WSAStartup(MAKEWORD(2,0),&wa);
if(nRlt != 0)
{
AfxMessageBox("Ws2_32.dll初始化失败!\n");
return ;
} char Hostname[100];
ZeroMemory(Hostname,100);
HOSTENT *pHostEnt;
int nAdapter = 0;
gethostname( Hostname, 100);
pHostEnt = gethostbyname( Hostname );
while ( pHostEnt->h_addr_list[nAdapter] )
{
CString str1,strIP;
for(int i=0;i<4;i++)
{
if(i>0)
strIP+=".";
str1.Format("%i",(int)((unsigned char*)pHostEnt->h_addr_list[nAdapter])[i]);
strIP+=str1;
}
TRACE("ip:%s\n",strIP); arIP->Add(strIP); nAdapter++;
}
WSACleanup( );
}