【学习笔记】
看了好几天,一直不知道问题出在哪里,最后发现少了这个函数调用
AfxSocketInit();
这里再把udp通讯的整体流程以及关键代码放在这里
项目中udp功能模块的关键代码:
void CPCSFlashDlg::OnBtnCtrlConn()//创建套接字
{
if (NULL != m_pSocket)
{
m_pSocket->Close();
delete m_pSocket;
m_pSocket = NULL;
}
//以下部分是 使用CIPAddressCtrl类型的m_peerIPaddr 通过窗口获取数据 赋值给BYTE类型数据,
//然后再传给string类型的m_strPeerIPaddr
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);