【学习笔记】
看了好几天,一直不知道问题出在哪里,最后发现少了这个函数调用
AfxSocketInit();
这里再把udp通讯的整体流程以及关键代码放在这里
项目中udp功能模块的关键代码:
void CPCSFlashDlg::OnBtnCtrlConn()
{
if (NULL != m_pSocket)
{
m_pSocket->Close();
delete m_pSocket;
m_pSocket = NULL;
}
BYTE field[4];
m_peerIPaddr.GetAddress(field[0], field[1], field[2], field[3]);
m_strPeerIPaddr.Format(TEXT("%d.%d.%d.%d"), field[0], field[1], field[2], field[3]);
m_pSocket = new CUdpSocket();
m_pSocket->Create(m_localPortNum, SOCK_DGRAM);
m_pSocket->Bind(m_peerPortNum, m_strPeerIPaddr);
}
void CPCSFlashDlg::OnBtnSendData()
{
OnBtnCtrlConn();
UpdateData(TRUE);
if (NULL == m_pSocket )
{
AfxMessageBox(TEXT("尚未打开端口!"));
return;
}
else if (m_dataToSend.IsEmpty())
{
AfxMessageBox(TEXT("请选择要发送的数据文件!"));
return;
}
AfxMessageBox(TEXT("UDP已建立连接,正在发送数据。。。\r\n"));
m_pSocket->SendTo(m_dataToSend, m_dataToSend.GetLength(),
m_peerPortNum, m_strPeerIPaddr);
AfxMessageBox(TEXT("网口发送结束....."));
}
再调用上面的函数前,先初始化一些数据
m_localPortNum = 8888;
m_peerPortNum = 9220;
m_dataToSend = _T("11111");
m_pSocket = NULL;
AfxSocketInit();
m_peerIPaddr.SetAddress(127,0,0,1);
m_localIPaddr.SetAddress(127,0,0,1);
|