MFC 使用UDP协议进行数据传输 本人qq942331295
软件采用UDP协议进行数据传输,但是只能一端发送一端接收,反过来就不行;能够发送就说明是可以进行通信的,但是又不知道为什么只能单向通信,跪求大神解答啊
具体代码如下:
//连接网络
void CAtosCHCDlg::OnNetSendButton()
{
// TODO: Add your control notification handler code here
if (NULL != m_pSocket)
{
m_pSocket->Close();
delete m_pSocket;
m_pSocket = NULL;
}
if (!m_bIsConnected)
{
m_bIsConnected = TRUE;
UpdateData(TRUE);
BYTE field[4];
m_RemoteIp.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_LocalNum, SOCK_DGRAM);
m_pSocket->Bind(m_RemoteNum, m_strPeerIPaddr);
GetDlgItem(IDC_NET_SEND_BUTTON)->SetWindowText(TEXT("断开连接"));
}
else
{
m_bIsConnected = FALSE;
GetDlgItem(IDC_NET_SEND_BUTTON)->SetWindowText(TEXT("建立连接"));
}
}
发送代码:
CString dataToSend ;//= m_strRecieve;
if (NULL == m_pSocket || !m_bIsConnected)
{
AfxMessageBox(TEXT("尚未打开端口!"));
//return;
}
dataToSend = "测试数据";
m_pSocket->SendTo(dataToSend, dataToSend.GetLength(),m_RemoteNum,m_strPeerIPaddr);
接收代码:
void CUdpSocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
TCHAR recBuf[1024];
int len = sizeof(SOCKADDR_IN);
ZeroMemory(recBuf, sizeof(recBuf));
int recBytes = ReceiveFrom(recBuf, 1023, (SOCKADDR*)&m_clientAddr, &len, 0);
if (0 == recBytes)
{
AfxMessageBox(TEXT("UDP连接已经关闭!"));
}
else if (SOCKET_ERROR == recBytes)
{
AfxMessageBox(TEXT("接受数据失败!"));
}
else
{
CString strBuf;
strBuf.Format(TEXT("收到数据: %s"), recBuf);
AfxMessageBox(strBuf, MB_OK);
}
CSocket::OnReceive(nErrorCode);
}