⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_65472.htm

📁 vc
💻 HTM
字号:
<p>
序号:65472 发表者:c6000 发表日期:2003-12-17 20:53:07
<br>主题:救命啊! 关于UDP多播碰到的问题(具体内祥)!
<br>内容:本人是一个VC初学者,最近根据大家在论坛上提供的代码试着写了一个多播的,碰到一个问题,就是程序在编译到setsockopt时,老是暴错,错误代码是10049,我查了一下,意思好像是说多播地址有问题,我把地址改成224.5.6.7也不行(我在有的书里看到多播地址是224。*。*。*,MSDN里是234.*.*.*),试过无数次老是在这里碰到问题,我不明白,还请各位朋友帮忙看一下,在这里先谢过了:),代码如下:<BR><BR>void CWorkView::OnInitialUpdate() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnInitialUpdate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your specialized code here and/or call the base class<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CWorkApp* pApp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pApp = (CWorkApp*)AfxGetApp();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;ServerPort = pApp-&gt;m_nPort;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ServerName = pApp-&gt;m_str;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL optval = TRUE;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//UDP多播<BR>&nbsp;&nbsp;&nbsp;&nbsp;SOCKET testsock;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;testsock = ADDMcast_IP(&#34;234.5.6.7&#34;, &#34;10.12.12.188&#34;, ServerPort);<BR>&nbsp;&nbsp;&nbsp;&nbsp;TestSocket.m_hSocket = testsock;//TestSocket.m_hSocket是我先前用CSocket类定义的一个句柄,我是在CSocket这个类的基础上改的,CSocket里的SetSocketOpt里没有IPPROTO_IP, IP_ADD_MEMBERSHIP这两个参数<BR><BR>}<BR><BR>void CWorkView::SendDataToVx()<BR>{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!TestSocket.SendTo(&amp;m_pDlgControl-&gt;sDataStruct,sizeof(m_pDlgControl-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&gt;sDataStruct),ServerPort,ServerName,NULL))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox(&#34;NetSend Error&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestSocket.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>}<BR><BR>SOCKET CWorkView::ADDMcast_IP(char *McastAddr, char *LocalAddr, UINT PortNum)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;SOCKET msock;<BR>&nbsp;&nbsp;&nbsp;&nbsp;SOCKADDR_IN msockaddr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct ip_mreq mcastIF;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;testerror = 0;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CString str;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;WSADATA WSAData;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Contains details of the <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Winsock implementation<BR>&nbsp;&nbsp;&nbsp;&nbsp;// Initialize Winsock. <BR>&nbsp;&nbsp;&nbsp;&nbsp;if (WSAStartup (MAKEWORD(1,1), &amp;WSAData) != 0) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;msock = socket(AF_INET, SOCK_DGRAM, 0);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (msock == INVALID_SOCKET)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(&#34;socket() failed: %d&#34;, WSAGetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;msockaddr.sin_family = AF_INET;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msockaddr.sin_port = htons(PortNum);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msockaddr.sin_addr.s_addr = htonl(INADDR_ANY);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;testerror = bind(msock, (sockaddr*)&amp;msockaddr, sizeof(sockaddr));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (testerror)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(&#34;bind() failed: %d&#34;, WSAGetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//testerror = setsockopt(msock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&amp;mcastIF, sizeof&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(struct ip_mreq));<BR>&nbsp;&nbsp;&nbsp;&nbsp;mcastIF.imr_multiaddr.s_addr = inet_addr (&#34;234.5.6.7&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mcastIF.imr_interface.s_addr = inet_addr (&#34;10.12.12.188&#34;);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;testerror = setsockopt(msock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char FAR *)&amp;mcastIF, sizeof&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(struct ip_mreq));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (testerror)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.Format(&#34;set mcast failed: %d&#34;, GetLastError());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(str);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PostQuitMessage(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return msock;<BR>}<BR><BR>再说一下,谢谢了!请各位高手帮帮忙吧!哎。。。。。。。。&nbsp;&nbsp;<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:dm9901 回复日期:2004-02-12 19:27:33
<br>内容:应该根据你使用的计算机的实际IP地址来设置。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -