读书笔记:在局域网中实现多播功能(2)
cout<<"Error in setsockopt(SO_REUSEADDR): "< return 0;
}
const int routenum = 10;
ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_TTL,
(char*)&routenum,sizeof(routenum));
if( ret == SOCKET_ERROR )
{
WSACleanup();
cout<<"Error in setsockopt(IP_MULTICAST_TTL): "< return 0;
}
const int loopback = 0; //禁止回馈
ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_LOOP,
(char*)&loopback,sizeof(loopback));
if( ret == SOCKET_ERROR )
{
WSACleanup();
cout<<"Error in setsockopt(IP_MULTICAST_LOOP): "< return 0;
}
sockaddr_in local;
memset(&local, 0, sizeof(local));
local.sin_family = AF_INET;
local.sin_port = htons(MULTICAST_PORT);
local.sin_addr.S_un.S_addr = INADDR_ANY;
ret = bind(server, (sockaddr*)(&local), sizeof(local));
if( ret == SOCKET_ERROR )
{
WSACleanup();
cout<<"Error in bind: "< return 0;
}
ip_mreq mreq;
memset(&mreq, 0, sizeof(mreq));
mreq.imr_interface.S_un.S_addr = INADDR_ANY;
mreq.imr_multiaddr.S_un.S_addr = inet_addr(MULTICAST_IP);
//加入一个多播组
ret = setsockopt(server,IPPROTO_IP,IP_ADD_MEMBERSHIP,
(char*)&mreq,sizeof(mreq));
if( ret == SOCKET_ERROR )
{
WSACleanup();
cout<<"Error in setsockopt(IP_ADD_MEMBERSHIP): "< return 0;
}
//创建了两个线程,一个读用户输入并发送,一个读多播组数据
HANDLE hHandle[2];
hHandle[0] = (HANDLE)_beginthread(do_send,0,(void*)server);
hHandle[1] = (HANDLE)_beginthread(do_read,0,(void*)server);
- 上一篇:让你的控制台程序也支持自动补齐
- 下一篇:VC/VB 进行图像数据存储数据库心得