新手入了MFC的坑,做MFC网络调试助手,记录:
1.效果图,下方有连接(免费)
2.网络调试助手功能较完善,不支持中文转16进制,目前没想到好方法,欢迎交流
3,socket通信使用MFC封装的CSocket类,搞清楚通信的流程很重要,这样的文章有很多
4,进制之间的转化,这个涉及到进制之间的互相转化,因该多去学习
5,各种控件的使用。
socket的通信,TCP 服务器 Create,bind ,listen ,accept, send/Receive
客户端:create ,connect ,send/Receive
这个软件 支持TCP server /TCP client /UDP 三种通信方式,设计CSocket派生类,CSocku 用于接收UDP通信的消息,CClientSocket用于接收服务器发送来的消息,CConnectSocket类接收客户端发送来的消息。在三个派生类中添加OnReceive虚消息。CnettestDlg中服务发送消息。CListenSocket中用CPtrlist存放每一个访问的客户端地址。
nettest.h
// nettest.h : PROJECT_NAME 应用程序的主头文件
//
#pragma once
#ifndef __AFXWIN_H__
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
#endif
#include "resource.h" // 主符号
// CnettestApp:
// 有关此类的实现,请参阅 nettest.cpp
//
class CnettestApp : public CWinApp
{
public:
CnettestApp();
CPtrList m_list;//用来存放每一个客户端
// 重写
public:
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
};
extern CnettestApp theApp;
nettestDlg.h
// nettestDlg.h : 头文件
//
#pragma once
#include "afxwin.h"
#include"ClientSocket.h"
#include"ConnectSocket.h"
#include"ListenSocket.h"
#include "afxcmn.h"
#include"Socku.h"
// CnettestDlg 对话框
class CnettestDlg : public CDialogEx
{
// 构造
public:
CnettestDlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_NETTEST_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedCheck5();
CComboBox m_comb;
CConnectSocket m_connectsock;
CListenSocket m_listensock;
CSocku m_socku;
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedButton1();
sockaddr_in addr;
afx_msg void OnBnClickedButton2();
CEdit m_revEdit;
CProgressCtrl m_progress;
CEdit m_sendEdit;
afx_msg void OnTimer(UINT_PTR nIDEvent);