接收指定IP的UDP数据包问题。
头文件中定义部分:
CString strSrvIP, strLocalIP;
CSocket m_SendSocket;
CSocket m_ReceiveSocket;
void SendData();
void ReceiveData();
初始化部分:
v_dwSrvIP = (inet_addr("61.145.75.86"));
v_uiSrvPort = 27017;
v_uiLocalPort = 7110;
v_strSendMsg = A2S_INFO;
v_strReceiveMsg = _T("");
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_addr.s_addr = v_dwSrvIP;
strSrvIP = inet_ntoa(local.sin_addr);
strLocalIP = _T("127.0.0.1");
OnInitDialog()函数中的部分:
if(m_ReceiveSocket.Create(v_uiSrvPort, SOCK_DGRAM, NULL) == 0)
{
GetDlgItem(IDC_SEND)->EnableWindow(FALSE);
}
m_ReceiveSocket.Bind(v_uiSrvPort, strLocalIP);
if(m_SendSocket.Create(v_uiLocalPort, SOCK_DGRAM, NULL) == 0)
{
GetDlgItem(IDC_RECEIVE)->EnableWindow(FALSE);
}
m_SendSocket.Bind(v_uiLocalPort, strLocalIP);
函数实现部分:
void CCSManDlg::SendData()
{
char chrSend[A2S_INFO_LENGTH];
::SecureZeroMemory(chrSend, sizeof(chrSend));
USES_CONVERSION;
strcpy_s(chrSend, sizeof(chrSend), W2A(v_strSendMsg));
m_SendSocket.SendTo(chrSend, sizeof(chrSend), v_uiSrvPort, strSrvIP, 0);
}
void CCSManDlg::ReceiveData()
{
char chrReceive[A2S_INFO_LENGTH];
::SecureZeroMemory(chrReceive, sizeof(chrReceive));
m_ReceiveSocket.ReceiveFrom(chrReceive, sizeof(chrReceive), strLocalIP, v_uiLocalPort, 0);
USES_CONVERSION;
v_strReceiveMsg = A2W(chrReceive);
}
经截包工具测试,已经成功发送至指定的服务器IP,服务器返回udp数据包(已经知道其数据格式),但无法接收,在ReceiveFrom()函数中停住,DEBUG调试发现缓冲区没有内容,在一直等待接收,请教各位该如何修改?谢谢!