UDP组播禁止回送绑定问题 5C

udp组播时,设置ip_multicast_loop选项,如下所示:
int loopBack=0;//或1
a=setsockopt(sendSocket,IPPROTO_IP,IP_MULTICAST_LOOP,(char *)&loopBack,sizeof(int));
if(a==SOCKET_ERROR)
{
AfxMessageBox("loop set error");
return;
}

运行时总是弹出loop set error。

请教一下各位大侠那写的有问题,其他bind(),的组播设定都没问题

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用UDP组播的问题
我做一个点到多点的消息通信程序,使用的是UDP的组播方式,几个客户端都通过UDP加入到同一个组225.0.0.5(其他组播地址也可以),然后一个客户端发出消息到该组,则组中的其他客户端都能够收到该组播消息,程序在局域网中运行良好,但是当其中一个客户端所在的机器连上了internet之后就会发现不能够发送消息到该组中,消息不知道发到什么地方去了,但是还是可以收到别的客户端发过来的组播消息,一旦断开到internet的连接,马上又都正常了,这个是什么原因呢,我的程序最终是要放到internet上面运行的啊,就像QQ的群一样,是如何实现的呢?谢谢
UDP组播聊天的问题?
http://blog.csdn.net/jjyjjyjjy/archive/2005/06/14/394365.aspx#FeedBackrnrn按照这篇文章的代码运行了一下,局域网内的其他机子无法收到信息,只有自己的机子能收到,多播类MulticastSocket,如何把所有局域网内的机子都加入这个组播类?
求教!!UDP组播问题
一个java实现的UDP组播聊天程序 在局域网内的两台电脑上运行 结果对方无法接受自己发出的信息 rn是否和路由器配置有关? 求教!!!rn附上程序网址:http://www.cublog.cn/u1/35830/showart_538031.html
udp组播
udp组播udp组播先说明组播与广播 C语言实现客户端与服务端udp组播传递信息 监听端 发送端 先说明组播与广播可以参考的资料 Dake423大神的UDP 组播 广播 wiki的解释简单说就是下面这一句 组播是一对多的传输方式,发送端将数据向一个组内发送,网络中的路由器通过底层的IGMP协议自动将数据发送到所有监听这个组的终端。 至于广播则和组播有一些相似, 区别是路由器向子网内的每
UDP 组播
请问有没有哪位大哥知道rnUDP 组播是否能在广域网中使用rn比如我是一个平台的大厅,当一个用户发言后,通过UDP组播的方式发送到其它大厅用户那里rn
UDP组播
UDP组播的搭建流程 ----------------------------------------------------------------------------------------------------------------------------- 【murecv.c】 #include #include
udp 组播
请教一下,对于现在的路由是不是都支持组播了?
linkbutton如何禁止回送刷新页面
rn rn rn rn rn rnrn这个是 gridview的一个列模板,点击这个linkbutton会刷新当前页面,如何禁止他这个刷新页面的动作?
达人请进--UDP传输高级问题:UDP回送延时问题
无线终端(GPRS)<--->有线网络服务器(ADSL)模式下,rn无线终端单独发送一包UDP数据时,在服务器(有线网络中)进行回传操作,延时在1.5秒左右,也就是说无线发送约0.8秒,无线接收约0.8秒,服务器处理时间约0秒,rn但是当无线终端进行连续发送时,总延迟在3秒左右(发送出去的数据,平均在3秒钟后才又被终端接收到), 可能是那些方面的原因呢?rn终端连续发送时的发送频率为5次/秒,每次80字节用户数据。服务器使用windowsXP,socket2.0标准设计。
组播中,第二次不回送是为什么?
if(m_bConnected)rn rn AfxMessageBox("Has Successfully Create the socket!\n");rn return FALSE;rn rn m_hWnd = hWnd;rn int ret;rnrn // 将字符串地址转换为套接字地址rn int iLen = 0;rn int cbRet = 0;rn int nIP_TTL =16;//设置IP数据生存期16rn BOOL bFlag;rn iLen = sizeof(addr);rnrn //m_hSocket = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, 0, rn //// //WSA_FLAG_OVERLAPPED | WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF);rn m_hSocket =WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,NULL,0,rn WSA_FLAG_OVERLAPPED|WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);rnrn if (m_hSocket == INVALID_SOCKET)rn AfxMessageBox("WSASocket:%d\n",WSAGetLastError());rn return FALSE;rn rnrn bFlag = TRUE; // 设置套接字为可重用端口地址rn rn //Call this member function to set a socket optionrnrn ret = setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&bFlag,rn sizeof (bFlag)); rnrn if(ret == SOCKET_ERROR)rn AfxMessageBox("setsockopt:%d",WSAGetLastError());rn return FALSE;rn rn rn // 将套接字绑扎到用户指定端口及默认的接口rn addr.sin_family = AF_INET;/////////PF_INETrn addr.sin_port = htons (port);rn addr.sin_addr.s_addr = INADDR_ANY;rnrn/// ret = bind (m_hSocket, (struct sockaddr FAR *)&addr, sizeof(struct sockaddr));rn ret = bind (m_hSocket, (PSOCKADDR)&(addr),sizeof(addr)); rnrn if (ret == SOCKET_ERROR)rn AfxMessageBox("bind: %d", WSAGetLastError());rn return FALSE;rn rn rn // 设置多址广播数据报传播范围(TTL)rn //The WSAIoctl function controls the mode of a socketrnrn //,SIO_MULTIPOINT_LOOPBACKrnrn ret = WSAIoctl(m_hSocket,SIO_MULTICAST_SCOPE, &nIP_TTL, rn sizeof (nIP_TTL), NULL, 0, (unsigned long*)&cbRet, NULL, NULL);rn rn//允许回送本机 rn static int loopBack=TRUE;rn int ret2=WSAIoctl(m_hSocket,SIO_MULTIPOINT_LOOPBACK,&loopBack,sizeof(loopBack), NULL, 0, (unsigned long*)&cbRet, NULL, NULL);rn rn if (ret == SOCKET_ERROR||ret2==SOCKET_ERROR)//rn AfxMessageBox("SAIoctl(SIO_MULTICAST_SCOPE):%d\n",WSAGetLastError());rn return FALSE;rn rn rn char* chAddr = lpstrAddr.GetBuffer(0);rn rn //converts a numeric string to a sockaddr structure, rn //suitable for passing to Windows Sockets routines that take such a structure.rnrn ret = WSAStringToAddress(chAddr, AF_INET,NULL, (LPSOCKADDR)&addr, &iLen);rn rn if(ret == SOCKET_ERROR)rn m_bConnected = FALSE;rn //Sends the specified string to the debugger of the current applicationrn AfxMessageBox("WSAStringToAddress:%d\n",WSAGetLastError());rn return FALSE;rn rnrn srcaddr=addr;rn srcaddr.sin_port = htons (port);rnrn //WSABUF wsaCalleeData;rn rn //joins a leaf node into a multipoint session, exchanges connect data, rn //and specifies needed quality of service based on the specified FLOWSPEC structuresrn rn m_hGroupSocket = WSAJoinLeaf(m_hSocket, (PSOCKADDR)&addr,sizeof(addr),rn NULL,NULL, NULL, NULL,JL_BOTH); //&wsaCalleeDatarn rn //JL_BOTH: Flags to indicate that the socket is acting as a sender (JL_SENDER_ONLY), receiver (JL_RECEIVER_ONLY), or both (JL_BOTH)rn rn if (m_hGroupSocket == INVALID_SOCKET)rn m_bConnected = FALSE;rn AfxMessageBox("WSAJoinLeaf():%d\n", WSAGetLastError());rn return FALSE;rn rn rn rn //requests Windows message-based notification of network events for a socketrn ret = WSAAsyncSelect(m_hGroupSocket, m_hWnd, WM_MULTIPOINTEVENT, rn FD_WRITE | FD_READ | FD_QOS | FD_GROUP_QOS | FD_CONNECT);rnrnrn if(ret == SOCKET_ERROR)rn AfxMessageBox("WSAAsyncSelect():%d\n", WSAGetLastError());rn m_bConnected = FALSE;rn return FALSE;rn rn在程序中已经设置了回送本机,本机发送时第一次收到了自己发送的内容,而再次发送却接收不到发送的内容,而组中其它的成员机子两次都收到了,为什么?
请教一个UDP组播的问题
用WinSend发送组播,发送的文件是一个TS流,从物理机windows往虚拟机Linux系统上发。接收端程序是我写的,每次发送都是发出85866KB,但是接收的文件就要比这个小几百K。这样播放时候丢帧就会卡顿几下。附上代码,请高手指点下,谢谢。rnrn[code=c]rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rnrn#define MAX_LENGTH 5 * 1024 * 1024rn#define PORT 8000rn#define GROUP "239.1.1.1"rnrnint main()rnrn struct sockaddr_in server, client;rn struct ip_mreq mreq;rn unsigned char buf[MAX_LENGTH];rn int fd, sinSize, recvlength;rn fd_set readfds;rn int ret;rn struct timeval timeout = 3, 0;rn rn memset(&server, 0, sizeof(struct sockaddr_in));rn memset(&client, 0, sizeof(struct sockaddr_in));rn memset(&mreq, 0, sizeof(struct ip_mreq));rn rn server.sin_family = AF_INET;rn server.sin_port = htons(PORT);rn if (inet_aton(GROUP, &server.sin_addr) < 0) rn perror("inet_aton");rn return -1; rn rn rn if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) rn perror("socket");rn return -1; rn rn rn if (bind(fd, (struct sockaddr *) &server, sizeof(server)) < 0) rn perror("bind");rn return -1;rn rn rn if (inet_aton(GROUP, &mreq.imr_multiaddr) < 0) rn perror("inet_aton mreq.imr_multiaddr");rn return -1; rn rn inet_aton("192.168.180.170", &(mreq.imr_interface));rn if (setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) rn perror("setsockopt");rn return -1;rn rn rn sinSize = sizeof(client);rn FILE *fp;rn fp = fopen("./recv1.2.ts", "ab+");rn while (1) rn FD_ZERO(&readfds);rn FD_SET(fd, &readfds);rn if ((ret = select(fd + 1, &readfds, NULL, NULL, &timeout)) < 0) rn break;rn else if(ret == 0)rn continue;rn else rn if (FD_ISSET(fd, &readfds) == 0) rn continue;rn recvlength = recvfrom(fd, buf, MAX_LENGTH, 0, (struct sockaddr *) &client, &sinSize);rn if (recvlength < 0) rn perror("receive");rn continue; rn rn fwrite(buf, sizeof(unsigned char), recvlength, fp);rn fflush(fp);rn rn rnrn[/code]
Android UDP组播通信问题
项目中遇到: Android 设备与PC路由搭建组播网络后,PC可以接收到Android 端的udp,但是Android端接收不到PC端发出的udp组播报文;网上说是Android API本身就禁掉了,默认情况下,应用是不接收组播信息的,这样要接收处理的报文太多,很快就会把电池用尽。要知道移动设备(特指电话一类的,平板要好得多)目前最重要的因素是电量。 要想打开组播功能,有以下几个步骤: 在...
求助 udp 组播 双网卡问题
机器有双网卡,启动一个C#程序 ,其中一个网卡可以接收组播数据(比如192.168.2.1),另一个接收不到(比如192.168.3.1),现在程序启动时会自动使用 第二个网卡去接收数据,结果接不到,要想接到就得关闭这个网卡再启动程序,请问有什么方式可以让程序自动用第一个网卡去接收数据。
c++builder6下udp组播接收问题
以前用控件TNMUDP来做过udp的收发,现在想做接收组播功能,不知怎么用。求教了!
问个udp组播发送的问题
现在机器上有多个网卡,我只需用其中一块网卡来发送组播数据,这个怎么搞??rn绑定还是别的什么方法??
继续请教udp组播的问题。。
问题1:多播地址不是应该是192.168.255.255这样的么?,,为什么我看到有的例子是224.168.100.2,,rnrn问题2:我使用 udpClient.JoinMulticastGroup(IPAddress.Parse("xxx.xxx.xxx.xxx"));rn无论输入什么ip都会报错请求的地址无效,,为什么?
UDP组播与广播测试程序
自己用MFC编写的UDP广播和组播测试程序,很实用
udp组播应用例子
Linux/Unix下c语言,udp组播应用的例子
UDP广播与组播通信
广播与组播通信实现流程,广播方式发送给所有主机。组播又称为多播,是一种折中的方式,只有加入某个多播组的主机才能就收到数据。
简单明了的介绍UDP组播
简单明了的介绍UDP组播,保证易学易用。 本人上传虽然为了积分,但也本着不让你白瞎积分的原则
NodeJS Udp 广播和组播
NodeJS Udp 广播和组播,自己测试可用。使用时先启动UdpServer,再启动UdpClient。
udp组播的奇怪现象
udp做组播,用抓包软件无法抓到包,说明数据没有发出.然后增加了一句代码(红色标注),数据就可以发出去了,但是去除这句后,过一会儿数据又不能发送出去了.因为这只是个实验,实际的发送是用gsoap的框架来做的,不好修改里面的源代码,求解释.rn 注:没有启用其他if,wifi关了的,操作系统32位win7.rn[code=c]rn WSADATA wsa;rn SOCKET udp;rn SOCKADDR_IN sinPeer;rn struct in_addr eth0;rn int flag = 0;rn WSAStartup(MAKEWORD(2, 2), &wsa);rnrn udp = socket(AF_INET, SOCK_DGRAM, 0);rn rn [color=#FF0000]eth0.s_addr = htonl(INADDR_ANY);rn setsockopt(udp, IPPROTO_IP, IP_MULTICAST_IF, &eth0, sizeof(eth0));[/color]rnrn memset(&sinPeer, 0, sizeof(sinPeer));rn sinPeer.sin_family = AF_INET;rn sinPeer.sin_port = htons(3702);rn sinPeer.sin_addr.s_addr = inet_addr("239.255.255.250"); rnrn while (1)rn rn sendto(udp, "1234567", 7, 0, (SOCKADDR *)&sinPeer, sizeof(sinPeer));rn Sleep(10);rn rn[/code]
UDP组播通信
开发工具使用的是Android Studio。采用MulticastSocket实现通信。
UDP 组播 vc 例子
组播主要有以下几个步骤:1. 建立支持数据报的scoket2. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)3. 通过setsockopt IP_ADD_MEMBERSHIP加入一个组播组4. 然后就能通过sendto / recvfrom进行数据的收法5. 通过 setsockopt IP_DROP_MEMBERSHIP离开一个组播组6. 关闭socket如果你仅仅是想向一个组播组发送数据,而不要接受数据,那么可不用加入组播组,而直接通过sendto向组播组发送数据五.winsock 2组播 winsock 2组播主要是通过WSAJoinLeaf来实现的(WSAJoinLeaf的行为,返回值根据socket的模式,组播的实现构架有很大的关系) winsock 2组播的主要有以下几个步骤1. 建立支持数据报的socket(用WSASocket建立socket,同2. 时设置组播的一些属性)3. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)4. 通过WSAJoinLeaf加入一个组播组5. 通过sendto / recvfrom进行数据的收发6. 直接关闭socket,7. 退出组播组
UDP的组播简单实现
第一篇博客,从今天开始,目的只是为自己做个备忘,感觉自己的记性越来越差了。ps现在只能一个手敲代码,好累好慢! 最近做一个项目需要用到组播,细节的把组播研究了下,写了个简单的代码,以供自己以后使用。 发送端 对于发送端来说,很简单,跟普通的udp通信没有区别,创建一个socket,然后sendto目的地址(组播地址+端口)就可以了。 需要注意的是,如果想固定发送端的发送端口,就需要用bin...
UDP之多播/组播
什么是多播(组播)?为什么出现多播(组播)? 由上节课讲到的广播,可以知道:Server给局域网的交换机发送数据,无论连接到局域网的客户端想不想接收该数据,Server都会给客户端发送该数据。—&amp;amp;gt;进而造成客户端上数据的拥塞—&amp;amp;gt;因此引出了多播(组播):Server可以将数据包只发送给指定组内的客户端,而不发送给指定组外的客户端。 组播地址 IP地址 244.0.0.0~...
udp组播多播
简单的udp组播多播,接收和发送两个程序
UDPMulticast_Windows. UDP组播代码
VC++ Socket 组播代码
Udp组播通信
C#UDP组播通信客户端和服务端,可以进行无连接通信
udp组播 socket
#include rn#include rnrn#include rn#include rnrnrnvoid main()rnrn WORD wVersionRequested;rn WSADATA wsaData;rn rn wVersionRequested = MAKEWORD( 1, 1 ); rn if( WSAStartup( wVersionRequested, &wsaData ) != 0 )rn return ;rn if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )rn rn WSACleanup( );rn return ;rn rn rn HANDLE m_thread = NULL;rn DWORD ThreadID= 0, error = STILL_ACTIVE;rnrn char srcbuf[100] = 0;rn int size=3000,readsize=0,csize=0;rn int recv_fd = 0;rnrn int len,ttl=2,bufsize = 0;rn char buf[1024], buf_command[32];rn rn struct sockaddr_in local_in;rn struct sockaddr_in dest_in;rn struct ip_mreq mreq;rn rn if((recv_fd = socket(AF_INET,SOCK_DGRAM, 0)) < 0)rn rn printf("创建socket失败\n");rn return ;rn rn rn memset(&(local_in), 0, sizeof(struct sockaddr_in));rn rn local_in.sin_family = AF_INET;rn local_in.sin_port = htons(12345);rn local_in.sin_addr.s_addr = INADDR_ANY;rn rn if(bind(recv_fd, (sockaddr*)&(local_in), sizeof(struct sockaddr_in)))rn rn printf("绑定socket失败\n");rn closesocket( recv_fd );rn return ;rn rn rn len=sizeof(struct sockaddr_in);rn mreq.imr_multiaddr.s_addr = inet_addr("234.5.6.7"); rn mreq.imr_interface.s_addr = INADDR_ANY;rn rn if(setsockopt(recv_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char*)&mreq, sizeof(mreq)))rn rn printf("加入组播组失败\n" );rn closesocket( recv_fd );rn return ;rn rnrn dest_in.sin_family=AF_INET;rn dest_in.sin_addr.S_un.S_addr=inet_addr("234.5.6.7");rn dest_in.sin_port=htons(12346);rnrn len = sizeof(dest_in);rn rn recvfrom(recv_fd, buf, strlen(buf), 0, (sockaddr *)&dest_in, &len);rn printf("%s", buf);rn WSACleanup();rnrnrnrnrn上面是我写的UDP组播通信代码,我用wireshark抓包后发现不能收到这个组播发的包;rn组播地址:234.5.6.7 本地端口:12345 目标端口:12346rnrn各位大神给看看
UDP 组播通信?
我在EVC4.0环境下实现组播方式通信,现在单点通信已经可以 ,如果把代码改成组播方式,需要改哪些地方?谢谢
udp组播测试
这周主要做了udp组播的测试 服务器端代码: //服务器发送端 #include &lt;cstdio&gt; #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include &lt;netinet/in.h&gt; #include &lt;arpa/inet.h&gt; #include &lt;net...
UDP组播程序
UDP组播源程序,实现网内UDP的组播,分客户端和服务器两个程序!
vlc创建UDP组播
vlc UDP 组播 使用VLC软件来模拟组播TS流发送
zynq_zc702 UDP 组播的实现
zynq_zc702 UDP 数据收发,原先一直收不到数据,最终修改了底层代码,才可以接收到,花费了好几天时间,需要的朋友可以看看。
UDP(组播)调试工具
UDP通信,UDP组播调试助手源码。VS2010开发,C#语言编写。支持UDP通信接收与发送,UDP组播接收与发送功能,能够发送字符串和16进制数据
C# udp组播
自己写的udp组播的demo,只有最核心的代码,没有多余功能。有接收端和发送端两个程序。
udp广域网组播的实现
我来问一个如何用udp+socket来建立一个广域网的组播的问题,希望高手或者做过相关案例的人给个提示;rn1.现有的网络硬件是不是都支持组播rn2.现有的路由器支持组播的百分比是多少rn3.如何实现构建一个组播树rn
UDP组播实现
服务端(数据发送端) //////////////////////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include #include #define HELLO_PORT 7905 #define HELLO_GROUP "228
UDP组播发布
udp消息发送,其中有服务端和客户端。服务器可以群发。
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件

相似问题

1
esp8266-01进行udp通信时本地端口号问题
4
nginx udp 透传无法获取客户端真实IP
2
java使用netty创年udp服务,Windows可以,linux端口监听被占用
2
原始套接字收udp报文问题
1
C#需求:winform程序发送udp广播,并收到广播的机子回复消息?
1
windows下用python加入指定源组播报错(10049 在其上下文中,请求的地址无效)
3
安卓如何通过UDP接收一个excel表格文件,并根据其内容改变界面。
1
C语言UDP SOCKET编程求助
2
UDP给指定IP和端口传输数据包,为什么一直显示Network is unreachable: Datagram send failed
1
VR场景下,对应传输层的协议是TCP还是UDP?
0
请教一个通过tornado,实现udp和http同时通信的问题
1
关于在Linux上使用套接字Socket发送一个较大UDP包的问题?
2
udp 20ms 接收保存端口数据 数据出现重复 缺失,怎么解决?有偿帮忙-急
2
不同端口号加入到同一组播地址,关闭套接字时为什么会有影响?
2
如何使用PHP udp 发送16进制数据
0
网络层rawsocket是否能拦截内核收到的tcp/udp包,防止其进入内核的协议栈?
1
关于unitySocket的一个问题,求教一下。
0
windows下C++网络编程,发送组播报文,sendto()函数发送失败,WSAGetLastError()返回错误码为5
1
两台电脑通过udp socket互相一直发消息,结果两边都收不到,如果接着不停的发的话,能收到吗?
0
8266与pc机进行udp通信的问题