📄 subject_65472.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> CView::OnInitialUpdate();<BR> <BR> // TODO: Add your specialized code here and/or call the base class<BR><BR> CWorkApp* pApp;<BR> pApp = (CWorkApp*)AfxGetApp();<BR><BR> ServerPort = pApp->m_nPort;<BR> ServerName = pApp->m_str;<BR><BR> BOOL optval = TRUE;<BR><BR> //UDP多播<BR> SOCKET testsock;<BR><BR> testsock = ADDMcast_IP("234.5.6.7", "10.12.12.188", ServerPort);<BR> 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> if(!TestSocket.SendTo(&m_pDlgControl->sDataStruct,sizeof(m_pDlgControl- <BR><BR> >sDataStruct),ServerPort,ServerName,NULL))<BR> { <BR> MessageBox("NetSend Error");<BR> TestSocket.Close();<BR> }<BR><BR>}<BR><BR>SOCKET CWorkView::ADDMcast_IP(char *McastAddr, char *LocalAddr, UINT PortNum)<BR>{<BR> SOCKET msock;<BR> SOCKADDR_IN msockaddr;<BR> struct ip_mreq mcastIF;<BR> int testerror = 0;<BR><BR> CString str;<BR><BR> WSADATA WSAData; // Contains details of the <BR> // Winsock implementation<BR> // Initialize Winsock. <BR> if (WSAStartup (MAKEWORD(1,1), &WSAData) != 0) <BR> {<BR><BR> return FALSE;<BR> }<BR><BR> msock = socket(AF_INET, SOCK_DGRAM, 0);<BR><BR> if (msock == INVALID_SOCKET)<BR> {<BR> AfxMessageBox("socket() failed: %d", WSAGetLastError());<BR> }<BR><BR> msockaddr.sin_family = AF_INET;<BR> msockaddr.sin_port = htons(PortNum);<BR> msockaddr.sin_addr.s_addr = htonl(INADDR_ANY);<BR><BR> testerror = bind(msock, (sockaddr*)&msockaddr, sizeof(sockaddr));<BR><BR> if (testerror)<BR> {<BR> AfxMessageBox("bind() failed: %d", WSAGetLastError());<BR> }<BR><BR> //testerror = setsockopt(msock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mcastIF, sizeof <BR><BR> (struct ip_mreq));<BR> mcastIF.imr_multiaddr.s_addr = inet_addr ("234.5.6.7");<BR> mcastIF.imr_interface.s_addr = inet_addr ("10.12.12.188");<BR><BR> testerror = setsockopt(msock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char FAR *)&mcastIF, sizeof <BR><BR> (struct ip_mreq));<BR><BR> if (testerror)<BR> {<BR> str.Format("set mcast failed: %d", GetLastError());<BR> AfxMessageBox(str);<BR> //PostQuitMessage(0);<BR> }<BR><BR> return msock;<BR>}<BR><BR>再说一下,谢谢了!请各位高手帮帮忙吧!哎。。。。。。。。 <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 + -