Socket怎么加入组播组啊?
最近用C#中的Socket进行通讯编码。
但是发现在用Socket进行接受组播的时候,因为组播地址不是本地的127.0.0.1所以无法绑定。接受不料组播数据包。
代码如下:
IPEndPoint ipEndPoint = new IPEndPoint(System.Net.IPAddress.Parse(multiIPAddress), mutilUdpPort);
udpReceiveMutilVideoSocket = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
udpReceiveMutilVideoSocket.Bind(ipEndPoint);
在Bind的时候,告诉我说,远程主机地址无法绑定。
我也想过用UdpClient,但是UdpClient没有延时设置,如果万一给组播地址发送组播数据包的机器挂了,我这个UdpClient不是一直在那里等待接受数据包吗?这样下来,程序就down在那里啦!
哪位用过用Socket进行接受组播数据包的,指点下啊,谢谢!本人学习C#不到10天啊,大家帮帮忙啊,项目紧急啊,必须尽快解决啦!没有办法啦!
------解决方案--------------------这个例子很详细,估计够你用了:
http://www.codeproject.com/cs/internet/multicast.asp
E文文章,注册可下源代码.
------解决方案--------------------//发送方程序 sender.c
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#define BUFFSIZE 2048
#define IP_ADDR "224.8.8.1 "
#define DEST_PORT 8888
int main(int argc,char *argv[])
{
int sockfd;
struct sockaddr_in addr;
char szError[100];
char buf[] = "Hello, World! ";
int ttl = 255 ; // Arbitrary TTL value.
WSADATA WSAData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(2, 2);
if (WSAStartup (wVersionRequested , &WSAData) != 0)
{
printf ( "recver:Initialize Winsock error! ");
exit(1);
}
if (LOBYTE(WSAData.wVersion) != 2 || HIBYTE(WSAData.wVersion) != 2 ) {
WSACleanup( );
printf ( "setsockopt failed! Error: %d ", WSAGetLastError ());
exit(1);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(DEST_PORT);
addr.sin_addr.s_addr = inet_addr(IP_ADDR);
if ((sockfd=socket(AF_INET,SOCK_DGRAM,0)) < 0) {
printf( "sender:new a socket error!\n ");
exit(1);
}
if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl))!=0)
{
printf( "error setsockopt IP_MULTICAST_TTL\n ");
exit(1);
}
/*
if (bind(sockfd,(struct sockaddr *)&recver_addr,sizeof(recver_addr)) < 0) {
closesocket(sockfd);
printf( "recver:bind socket error!\n ");
exit(1);
}
*/