《MFC网络通信》Part 1 简单UDP通信

来源:互联网 发布:淘宝商城积分兑换 编辑:程序博客网 时间:2024/06/02 01:57

《MFC网络通信》Part 1 简单UDP通信                                                                                                                                            


1、新建普通的MFC(exe)对话框程序,程序命名为UDP,第二步中勾选Window Sockets

2、主对话框中添加一些控件,如下图

3、控件属性列表:

控件类型IDCaptionStyleStaticIDC_STATIC对方主机的IP地址:EditIDC_IPStaticIDC_STATIC端口:Edit IDC_PORTEditIDC_HIST多行、垂直滚动条(去掉自动水平滚动条)EditIDC_INPUTButtonIDOK发送(&S)ButtonIDCANCEL关闭

4、新建一个CSocket的派生类CSockUDP:

5、在CSockUDP的头文件中添加头文件:

#include <afxsock.h>/////////////////////////////////////////////////////////////////////////////// CSockUDP command targetclass CSockUDP : public CSocket{<span style="white-space:pre"></span>// Attributespublic:

6、在CSockUDP类中添加虚函数OnReceive,用于截获接收到的网络数据:

7、修改虚函数代码:
void CSockUDP::OnReceive(int nErrorCode) {// TODO: Add your specialized code here and/or call the base classchar s[2048];CString szIP;UINT nPort;int nRect = ReceiveFrom(s,sizeof(s),szIP,nPort);if(nRect<=0)return ;s[nRect] = 0;//将接收到的数据通过消息框显示出来//AfxMessageBox(s);CString str;str.Format("%s 对你说: \r\n%s\r\n",szIP,s);CWnd * pDlg = AfxGetMainWnd();CEdit * pEdit = (CEdit *)pDlg->GetDlgItem(IDC_HIST);pEdit->SetSel(pEdit->GetWindowTextLength(),-1);pEdit->ReplaceSel(str);CSocket::OnReceive(nErrorCode);}

8、修改主对话框的初始化函数代码:
BOOL CUDPDlg::OnInitDialog(){CDialog::OnInitDialog();if (!m_sock.Create(8828,SOCK_DGRAM)){CString str;str.Format("创建Socket时出错:%d",GetLastError());AfxMessageBox(str);}// Set the icon for this dialog.  The framework does this automatically//  when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);// Set big iconSetIcon(m_hIcon, FALSE);// Set small icon// TODO: Add extra initialization herereturn TRUE;  // return TRUE  unless you set the focus to a control}

9、在App类的进程启动函数InitInstance开头,添加一行初始化代码来初始化Socket:
BOOL CUDPApp::InitInstance(){//此处添加一行代码初始化SocketAfxSocketInit();…
10、在主对话框类中添加“发送(&S)”按钮的消息映射函数OnOK:
void CUDPDlg::OnOK() {// TODO: Add extra validation hereCString szIP,szText;GetDlgItemText(IDC_INPUT,szText);if (szText.IsEmpty()){AfxMessageBox("请输入要输入的文字!");return;}// GetDlgItemText(IDC_IP,szIP);if (szIP.IsEmpty()){AfxMessageBox("请输入对方主机的IP");return ;}UINT nPort = GetDlgItemInt(IDC_PORT);m_sock.SendTo(szText,szText.GetLength(),nPort,szIP);CString str;str.Format("你对 %s 说:\r\n%s\r\n",szIP,szText);CEdit *pEdit = (CEdit*)GetDlgItem(IDC_HIST);pEdit->SetSel(pEdit->GetWindowTextLength(),-1);pEdit->ReplaceSel(str);}

11、调试、运行程序,测试代码:
1)Win+R组合进入控制台界面,输入ipconfig得到主机的IP地址;
2)端口号的范围是0~65 535
3)在程序界面中输入IP:192.168.1.46,端口号随便给一个
注:可以自己装一个虚拟机测试UDP程序



1 0
原创粉丝点击