struct sockaddr_in addr,local;
struct ip_mreq mcast; //多播组 SOCKET csMultiCast;
DWORD dwInterface,dwMulticastGroup;
dwInterface = INADDR_ANY;
dwMulticastGroup = inet_addr("224.8.8.1");
int ttl = 255 ; local.sin_family = AF_INET;
local.sin_port = htons(8888);
local.sin_addr.s_addr = dwInterface;
WSADATA WSAData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(2, 2);
if (WSAStartup (wVersionRequested , &WSAData) != 0)
{
AfxMessageBox("初始化多播套接字失败!");
PostQuitMessage(1);
}
if (LOBYTE(WSAData.wVersion) != 2 || HIBYTE(WSAData.wVersion) != 2 )
{
WSACleanup( );
AfxMessageBox("套接字版本不对!");
PostQuitMessage(1);
} addr.sin_family = AF_INET;
addr.sin_port = htons(gm_uPort);
addr.sin_addr.s_addr = inet_addr(gm_strIpaddr);
if ((csMultiCast=socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
AfxMessageBox("建立多播套接字失败!");
PostQuitMessage(1);
}
if (bind(csMultiCast, (struct sockaddr *)&local,
sizeof(local)) == SOCKET_ERROR)
{
AfxMessageBox("bind failed ");
closesocket(csMultiCast);
WSACleanup();
PostQuitMessage(1);
} mcast.imr_multiaddr.s_addr = dwMulticastGroup;
mcast.imr_interface.s_addr = dwInterface; if (setsockopt(csMultiCast, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&mcast, sizeof(mcast)) == SOCKET_ERROR)
{
CString ss;
ss.Format("setsockopt(IP_ADD_MEMBERSHIP) failed: %d\n",
WSAGetLastError()); //为什么有时候出现这个错误?
AfxMessageBox(ss);
closesocket(csMultiCast);
WSACleanup();
PostQuitMessage(1);
} if(setsockopt(csMultiCast, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl))!=0)
{
CString str;
str.Format("设置套接字多播选项失败! ErrorCode:%d",GetLastError());
AfxMessageBox(str);
PostQuitMessage(1);
}//我把代码贴上,高手请指点一下小弟
struct ip_mreq mcast; //多播组 SOCKET csMultiCast;
DWORD dwInterface,dwMulticastGroup;
dwInterface = INADDR_ANY;
dwMulticastGroup = inet_addr("224.8.8.1");
int ttl = 255 ; local.sin_family = AF_INET;
local.sin_port = htons(8888);
local.sin_addr.s_addr = dwInterface;
WSADATA WSAData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(2, 2);
if (WSAStartup (wVersionRequested , &WSAData) != 0)
{
AfxMessageBox("初始化多播套接字失败!");
PostQuitMessage(1);
}
if (LOBYTE(WSAData.wVersion) != 2 || HIBYTE(WSAData.wVersion) != 2 )
{
WSACleanup( );
AfxMessageBox("套接字版本不对!");
PostQuitMessage(1);
} addr.sin_family = AF_INET;
addr.sin_port = htons(gm_uPort);
addr.sin_addr.s_addr = inet_addr(gm_strIpaddr);
if ((csMultiCast=socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
AfxMessageBox("建立多播套接字失败!");
PostQuitMessage(1);
}
if (bind(csMultiCast, (struct sockaddr *)&local,
sizeof(local)) == SOCKET_ERROR)
{
AfxMessageBox("bind failed ");
closesocket(csMultiCast);
WSACleanup();
PostQuitMessage(1);
} mcast.imr_multiaddr.s_addr = dwMulticastGroup;
mcast.imr_interface.s_addr = dwInterface; if (setsockopt(csMultiCast, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&mcast, sizeof(mcast)) == SOCKET_ERROR)
{
CString ss;
ss.Format("setsockopt(IP_ADD_MEMBERSHIP) failed: %d\n",
WSAGetLastError()); //为什么有时候出现这个错误?
AfxMessageBox(ss);
closesocket(csMultiCast);
WSACleanup();
PostQuitMessage(1);
} if(setsockopt(csMultiCast, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl))!=0)
{
CString str;
str.Format("设置套接字多播选项失败! ErrorCode:%d",GetLastError());
AfxMessageBox(str);
PostQuitMessage(1);
}//我把代码贴上,高手请指点一下小弟
解决方案 »
- 关于CTime t = CTime::GetCurrentTime()
- 如何设计线程中的死循环
- 调用DLL中的对话框返回时出现问题
- 怎样当拖动对话框时对话框窗体不刷新(急)分不够在加(因为限制加分)?
- 如何用程序读写pdf文件
- 动态数组??再线等待!
- 怎样使用Ture Type字体,对输入的文字进行鼠标拖动以改变大小
- COM
- Who can tell me that SetCursorPos() can not take effect
- mfc hook 非模态对话框 焦点
- 捡分题(我是门外汉),如何在一个ATLObject中公布一个方法啊!
- 我要在程序使用GetProcessIdFromName函数,我应该包含什么头文件呢??100分啊!!
错误码是多少?
if (setsockopt (Sock,
SOL_SOCKET,
SO_BROADCAST,
(char*) &TRUE,
sizeof(TRUE)) == SOCKET_ERROR){} if (setsockopt (Sock,
SOL_SOCKET,
SO_REUSEADDR,
(char*) &TRUE,
sizeof(TRUE)) == SOCKET_ERROR){}
int error=0;BOOL ReuseAddress=true;
error=setsockopt(m_socket,SOL_SOCKET,SO_REUSEADDR,
(char *)&ReuseAddress,sizeof(ReuseAddress));
if(error!=0)
{
TRACE("设置重用地址错误!");
return FALSE;
}再绑定