服务端:
void CServerDlg::OnSend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_sockSend.Create(m_ServerPort,SOCK_DGRAM)) //创建套接字
{
m_sockSend.Bind(m_ServerPort,m_ServerIP); //绑定本地套接口
SetTimer(1,3000,NULL); //创建一个定时器定时发送
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
}
else
{
AfxMessageBox("Socket创建失败!");
}
}
//其中,m_sockSend为CAsyncSocket对象,在对话框类头文件中声明。
void CServerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int iIndex=0; //计数
char szSend[20]; //发送数据缓冲区
sprintf(szSend,"%010d",iIndex++);
int iSend = m_sockSend.SendTo(szSend,10,m_ClientPort,m_ClientIP,0);//发送UDP数据
m_strSend=szSend; //当前发送数据
m_sendcount+=iSend; //记录发送字节数
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
void CServerDlg::OnStop()
{
// TODO: Add your control notification handler code here
KillTimer(1); //关闭定时器
m_sockSend.Close(); //关闭套接字
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
}
客户端:
void CServerDlg::OnReceive()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_sockReceive.Create(m_ClientPort,SOCK_DGRAM,NULL)) //创建套接字
{
m_sockReceive.Bind(m_ClientPort,m_ClientIP); //绑定本地套接口
SetTimer(1,2000,NULL); //创建一个定时器定时发送
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
}
else
{
AfxMessageBox("Socket创建失败!");
}
}
void CServerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char szRecv[20]; //接收数据缓冲区
int iRecv = m_sockReceive.ReceiveFrom(szRecv,10,m_ServerIP,m_ServerPort,0);//发送UDP数据
if (iRecv==-1)
{
m_ReceiveData="没有收到数据!";
}
else
{
m_receivecount+=iRecv; //记录发送字节数
szRecv[iRecv]=NULL;
m_ReceiveData=szRecv; //当前发送数据
}
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
void CServerDlg::OnStop()
{
// TODO: Add your control notification handler code here
KillTimer(1); //关闭定时器
m_sockReceive.Close(); //关闭套接字
m_ReceiveData="停止接收数据!";
UpdateData(FALSE);
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
}
注意:使用WinSock,需要在CWinApp类的InitInstance函数中添加WinSock初始化代码,如下所示:
if (!AfxSocketInit()) //初始化Socket
{
AfxMessageBox("WinSocket初始化失败");
return FALSE;
}
已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/535.html 欢迎订阅Eddy Blog。
Tags:CAsyncSocket UDP