《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
- 《MFC网络通信》Part 1 简单UDP通信
- 《MFC网络通信》Part 2 简单TCP通信
- 《MFC网络通信》Part 3 一般TCP通信
- [MFC]UDP通信的简单实现
- BOOST UDP 网络通信(1)
- UDP网络通信的简单例子
- TDI简单的UDP网络通信
- mfc socket udp通信
- socket网络通信(udp)
- socket网络通信(udp)
- 网络通信之UDP
- 网络编程--UDP通信
- android网络通信------UDP
- 网络通信--UDP
- 网络编程-udp通信
- 网络通信之UDP
- 网络通信4:UDP
- UDP网络通信
- Android webview禁止打开系统浏览器
- worktile团队分工
- self.navigationItem.backBarButtonItem 的title设置
- GitHub之接收、处理Pull Request
- 深度思考比勤奋更重要
- 《MFC网络通信》Part 1 简单UDP通信
- .sh脚本语法
- 第一篇博客
- bug修复-android中的onCreate两个参数的方法是什么鬼?
- 字符串非空判断:StringUtils中 isNotEmpty 和isNotBlank的区别
- JDBC借助Spring进行增删改查的操作--大大简化了程序
- 访问者模式
- shell运算符
- Ubuntu10.04下Linux内核编译的完整步骤