我有一个程序,分服务器和客户机两部分,服务器以组播的方式向某组播地址发送数据,客户端在这个组播地址上接收数据。我在单位调试时,单位是一个局域网环境,将服务器端程序和客户端程序在一台机子上运行,客户端可以接收到数据;可我在家里调试却不行,家里是小区宽带。各位大虾指点一下,家里的机子怎么无法接收本机发送的组播数据?(帮我解决问题的大虾才给分)
解决方案 »
- 在for循环里写send函数是不是很傻?
- 求个微软屏幕键盘的vc源码,从网上找了个不全!
- (xinyuxinlu )将对话框设置为view的子窗口 如何实现?
- 如何得到程序的hInstance
- 请问一个DWORD和CString的类型变换的问题
- 英文显示MessageBox()问题!
- 你们遇到这个问题吗?很怪很怪的!!!(没分给,能回答吗?)
- 如何用套接字在两台机子间传送数据?
- 怎样监测剪贴板的变化呀???急!!! 90分求详细解答
- 从数据库查询数据的效率问题,大家讨论讨论。
- 对不同线程之间传CWnd派生类的MFC object的一些困惑
- 画出的窗口, 上面放出完全画出的button. 就是一个rect.
"发到那个组播地址,就从那个组播地址读呀"
这点我还是懂的。问题是当我将服务器端和客户端安装在一台机子上时,服务器程序虽然向某组播地址(如224.0.0.5)发送数据,可是客户端程序从这个地址上读取不到数据;当我将服务器程序和客户端程序分别安装在局域网内的两台机子上时,客户端程序就能够正确读取数据。
组播建立的过程是先建一个本地的UDP套接字,再把这个加入多播组,得到一个多播组的套接字。从现象来年,问题可能出在建立本地UDP套接字的时候。按照一般书上或各种例程的写法,是使用INADDR_ANY常数,这样会程序会给这个套接字自动绑定一个本机IP,但是如果本机有多个IP,而只有一个是用于局款域网的,那么结果会怎么样呢?它绑定的不一定是你用于局域网通信的IP。
试试写成这样 mAddr.sin_addr.S_un.S_addr=inet_addr("192.168.0.1"); //假设你本机的局域网IP是192.168.0.1。如果这样可以了,那么解决方法就很明显了,首先遍历网卡及各网卡的IP,选择一个合适局域网IP(可以写代码自动选择),将UDP套接字绑定于此IP上,就OK了。
如这样仍解决不了,请把部分源代码贴出来。
const int nLoopBack = 1; //禁止回馈
//注意上面那个,如果为1就表示本机的多播数据不反馈到本机,否则设为0,下面就是对套接字进行设置的。
WSAIoctl(*sock,SIO_MULTIPOINT_LOOPBACK,(void *)&nLoopBack,sizeof(nLoopBack),NULL,0,&cbRet,NULL,NULL);