**** 网络高手们,碰到两块网卡,我的程序不能正确工作了 *** 我的服务器采用多播数据客户端接受多播数据,后来客户要求增加一块网卡上网, 当上网的网卡被启用,我的程序就无法接受来自服务器的数据, 我该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 daphant(feifei):客户端也需要用 bind吗? m_MultiGroupSock[iVideo]= WSASocket( AF_INET , SOCK_DGRAM , 0 , NULL, 0, WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF); if (m_MultiGroupSock[iVideo]==INVALID_SOCKET) { WSACleanup(); return false; }//绑定本定一个IP地址// struct sockaddr_in local;//// DWORD dwInterface= INADDR_ANY;////// local.sin_addr.s_addr = inet_addr(m_sInterface);// local.sin_port=htons(iPort);// local.sin_family=AF_INET;// // bind(m_MultiGroupSock[iVideo], (struct sockaddr *)&local, sizeof(local));//设置异步模式 if(WSAAsyncSelect(m_MultiGroupSock[iVideo], m_hWnd , IP_MULTIGROUP_EVENT, FD_CONNECT |FD_CLOSE | FD_WRITE | FD_READ )==SOCKET_ERROR ) { closesocket(m_MultiGroupSock[iVideo]); WSACleanup(); return false; } //加入多播组 m_MultiGroupIP[iVideo].sin_addr.s_addr = inet_addr(m_MulticastIP); m_MultiGroupIP[iVideo].sin_port=htons(iPort); m_MultiGroupIP[iVideo].sin_family=AF_INET;/* CString s; s.Format("IP:%s Port:%d", m_MulticastIP, iPort); MessageBox(s);*/ if(WSAJoinLeaf(m_MultiGroupSock[iVideo], (struct sockaddr FAR * )&m_MultiGroupIP[iVideo], sizeof(sockaddr), NULL, NULL, NULL, NULL, JL_RECEIVER_ONLY) == INVALID_SOCKET) { closesocket(m_MultiGroupSock[iVideo]); WSACleanup( ); return false; } 如果只有一个IP地址,可以不用,多个IP地址要的 ----------------对上面源代码的说明-----------m_sInterface 是我从ini文件读取得一个ip地址,也就是我要用的那块网卡的ip地址 (这块网卡接受服务器的多播数据)我这样做对吗?刚刚我看了几篇文章,说只有服务器进程需要bind ----------------提问------------------ struct sockaddr_in local; //这里能用 局部变量吗?// DWORD dwInterface= INADDR_ANY; //这句话和指定一个ip地址有什么不同吗? local.sin_addr.s_addr = inet_addr(m_sInterface); // local.sin_port=htons(iPort); local.sin_family=AF_INET; bind(m_MultiGroupSock[iVideo], (struct sockaddr *)&local, sizeof(local)); 先枚举一下所有的IP地址,然后绑定bind到一个固定的IP上就可以了 INADDR_ANY 有问题哟,你是不是两网卡一个连外网,一个连内网,不要用INADDR_ANY,具体指定一个ip吧。(好象是这样) 对你的问提很赶兴趣,我还没遇到过,可不可以发送过来一起探讨:[email protected] 求一个基于MFC的数字图像处理源代码 cmd netstat -a -n的结果 TIME_WAIT占不占用连接数或半连接数? 高手们入来睇下啦,别吝啬你们的智慧拉!帮帮我这个新手吧! API重叠方式通讯! 怎样同过代码设置WIN2000 屏保的密码 怎么判断两个窗口的大小?? 要得到近百万个文件的创建时间,如何能又快又省内存 请教高手:怎么连接MYSQL数据库呀 如何设置float的格式? 单向链表, 什么方法才能最快得到最后一个链表项的指针????? 多线程,堆,栈,参数的传递。有一些不明白的地方。 ★★★★★ GetGlyphOutline ★★★★★
AF_INET ,
SOCK_DGRAM ,
0 ,
NULL,
0,
WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF); if (m_MultiGroupSock[iVideo]==INVALID_SOCKET)
{
WSACleanup();
return false;
}//绑定本定一个IP地址
// struct sockaddr_in local;
//// DWORD dwInterface= INADDR_ANY;
//
//
// local.sin_addr.s_addr = inet_addr(m_sInterface);
// local.sin_port=htons(iPort);
// local.sin_family=AF_INET;
//
// bind(m_MultiGroupSock[iVideo], (struct sockaddr *)&local, sizeof(local));//设置异步模式
if(WSAAsyncSelect(m_MultiGroupSock[iVideo], m_hWnd , IP_MULTIGROUP_EVENT, FD_CONNECT |FD_CLOSE | FD_WRITE | FD_READ )==SOCKET_ERROR )
{
closesocket(m_MultiGroupSock[iVideo]);
WSACleanup();
return false;
}
//加入多播组
m_MultiGroupIP[iVideo].sin_addr.s_addr = inet_addr(m_MulticastIP);
m_MultiGroupIP[iVideo].sin_port=htons(iPort);
m_MultiGroupIP[iVideo].sin_family=AF_INET;/* CString s;
s.Format("IP:%s Port:%d", m_MulticastIP, iPort);
MessageBox(s);
*/
if(WSAJoinLeaf(m_MultiGroupSock[iVideo], (struct sockaddr FAR * )&m_MultiGroupIP[iVideo], sizeof(sockaddr),
NULL, NULL, NULL, NULL, JL_RECEIVER_ONLY) == INVALID_SOCKET)
{
closesocket(m_MultiGroupSock[iVideo]);
WSACleanup( );
return false; }
----------------提问------------------ struct sockaddr_in local; //这里能用 局部变量吗?
// DWORD dwInterface= INADDR_ANY; //这句话和指定一个ip地址有什么不同吗?
local.sin_addr.s_addr = inet_addr(m_sInterface); //
local.sin_port=htons(iPort);
local.sin_family=AF_INET;
bind(m_MultiGroupSock[iVideo], (struct sockaddr *)&local, sizeof(local));
INADDR_ANY,具体指定一个ip吧。(好象是这样)