MFC_TCP_Server

Stella981
• 阅读 355

MFC_TCP_Server

 1 // New_MFC_TCP_SreverDlg.h : 头文件
 2 //
 3 #define WM_SOCKET WM_USER+100
 4 #pragma once
 5 
 6 
 7 // CNew_MFC_TCP_SreverDlg 对话框
 8 class CNew_MFC_TCP_SreverDlg : public CDialogEx
 9 {
10 // 构造
11 public:
12     CNew_MFC_TCP_SreverDlg(CWnd* pParent = NULL);    // 标准构造函数
13 
14     //定义套子接句柄
15     SOCKET s;  
16     SOCKET s1;
17 
18     //定义套子接地址结构变量
19     sockaddr_in addr;
20     sockaddr_in addr1;
21 
22     int n;  //记录连接数
23 
24 
25 // 对话框数据
26 #ifdef AFX_DESIGN_TIME
27     enum { IDD = IDD_NEW_MFC_TCP_SREVER_DIALOG };
28 #endif
29 
30     protected:
31     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
32 
33 
34 // 实现
35 protected:
36     HICON m_hIcon;
37 
38     // 生成的消息映射函数
39     virtual BOOL OnInitDialog();
40     afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
41     afx_msg void OnPaint();
42     afx_msg HCURSOR OnQueryDragIcon();
43     DECLARE_MESSAGE_MAP()
44     afx_msg LRESULT OnSocket(WPARAM wParam, LPARAM lParam); //自定义消息函数
45 public:
46     afx_msg void OnEnChangeText();
47 };

  1 // New_MFC_TCP_SreverDlg.cpp : 实现文件
  2 //
  3 
  4 #include "stdafx.h"
  5 #include "New_MFC_TCP_Srever.h"
  6 #include "New_MFC_TCP_SreverDlg.h"
  7 #include "afxdialogex.h"
  8 
  9 #ifdef _DEBUG
 10 #define new DEBUG_NEW
 11 #endif
 12 
 13 
 14 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
 15 
 16 class CAboutDlg : public CDialogEx
 17 {
 18 public:
 19     CAboutDlg();
 20 
 21 // 对话框数据
 22 #ifdef AFX_DESIGN_TIME
 23     enum { IDD = IDD_ABOUTBOX };
 24 #endif
 25 
 26     protected:
 27     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
 28 
 29 // 实现
 30 protected:
 31     DECLARE_MESSAGE_MAP()
 32 };
 33 
 34 CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
 35 {
 36 }
 37 
 38 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
 39 {
 40     CDialogEx::DoDataExchange(pDX);
 41 }
 42 
 43 BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
 44 END_MESSAGE_MAP()
 45 
 46 
 47 // CNew_MFC_TCP_SreverDlg 对话框
 48 
 49 
 50 
 51 CNew_MFC_TCP_SreverDlg::CNew_MFC_TCP_SreverDlg(CWnd* pParent /*=NULL*/)
 52     : CDialogEx(IDD_NEW_MFC_TCP_SREVER_DIALOG, pParent)
 53 {
 54     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 55 }
 56 
 57 void CNew_MFC_TCP_SreverDlg::DoDataExchange(CDataExchange* pDX)
 58 {
 59     CDialogEx::DoDataExchange(pDX);
 60 }
 61 
 62 BEGIN_MESSAGE_MAP(CNew_MFC_TCP_SreverDlg, CDialogEx)
 63     ON_MESSAGE(WM_SOCKET,OnSocket)
 64     ON_WM_SYSCOMMAND()
 65     ON_WM_PAINT()
 66     ON_WM_QUERYDRAGICON()
 67     ON_EN_CHANGE(IDC_TEXT, &CNew_MFC_TCP_SreverDlg::OnEnChangeText)
 68 END_MESSAGE_MAP()
 69 
 70 
 71 // CNew_MFC_TCP_SreverDlg 消息处理程序
 72 
 73 BOOL CNew_MFC_TCP_SreverDlg::OnInitDialog()
 74 {
 75     CDialogEx::OnInitDialog();
 76 
 77     // 将“关于...”菜单项添加到系统菜单中。
 78 
 79     // IDM_ABOUTBOX 必须在系统命令范围内。
 80     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 81     ASSERT(IDM_ABOUTBOX < 0xF000);
 82 
 83     CMenu* pSysMenu = GetSystemMenu(FALSE);
 84     if (pSysMenu != NULL)
 85     {
 86         BOOL bNameValid;
 87         CString strAboutMenu;
 88         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
 89         ASSERT(bNameValid);
 90         if (!strAboutMenu.IsEmpty())
 91         {
 92             pSysMenu->AppendMenu(MF_SEPARATOR);
 93             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
 94         }
 95     }
 96 
 97     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
 98     //  执行此操作
 99     SetIcon(m_hIcon, TRUE);            // 设置大图标
100     SetIcon(m_hIcon, FALSE);        // 设置小图标
101 
102     // TODO: 在此添加额外的初始化代码
103 
104     CDialog::OnInitDialog();
105     addr.sin_family = AF_INET;
106     addr.sin_port = htons(80);
107     addr.sin_addr.S_un.S_addr = INADDR_ANY;
108     s = ::socket(AF_INET, SOCK_STREAM, 0);
109     ::bind(s, (sockaddr*)&addr, sizeof(addr));
110     ::listen(s, 5);
111     GetDlgItem(IDC_TEXT)->EnableWindow(false);
112     GetDlgItem(IDC_ADDR)->SetWindowText("服务器已经启动");
113 
114     ::WSAAsyncSelect(s,this->m_hWnd,WM_SOCKET,FD_ACCEPT|FD_READ);
115 
116     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
117 }
118 
119 void CNew_MFC_TCP_SreverDlg::OnSysCommand(UINT nID, LPARAM lParam)
120 {
121     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
122     {
123         CAboutDlg dlgAbout;
124         dlgAbout.DoModal();
125     }
126     else
127     {
128         CDialogEx::OnSysCommand(nID, lParam);
129     }
130 }
131 
132 // 如果向对话框添加最小化按钮,则需要下面的代码
133 //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
134 //  这将由框架自动完成。
135 
136 void CNew_MFC_TCP_SreverDlg::OnPaint()
137 {
138     if (IsIconic())
139     {
140         CPaintDC dc(this); // 用于绘制的设备上下文
141 
142         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
143 
144         // 使图标在工作区矩形中居中
145         int cxIcon = GetSystemMetrics(SM_CXICON);
146         int cyIcon = GetSystemMetrics(SM_CYICON);
147         CRect rect;
148         GetClientRect(&rect);
149         int x = (rect.Width() - cxIcon + 1) / 2;
150         int y = (rect.Height() - cyIcon + 1) / 2;
151 
152         // 绘制图标
153         dc.DrawIcon(x, y, m_hIcon);
154     }
155     else
156     {
157         CDialogEx::OnPaint();
158     }
159 }
160 
161 //当用户拖动最小化窗口时系统调用此函数取得光标
162 //显示。
163 HCURSOR CNew_MFC_TCP_SreverDlg::OnQueryDragIcon()
164 {
165     return static_cast<HCURSOR>(m_hIcon);
166 }
167 
168 
169 
170 void CNew_MFC_TCP_SreverDlg::OnEnChangeText()
171 {
172     // TODO:  如果该控件是 RICHEDIT 控件,它将不
173     // 发送此通知,除非重写 CDialogEx::OnInitDialog()
174     // 函数并调用 CRichEditCtrl().SetEventMask(),
175     // 同时将 ENM_CHANGE 标志“或”运算到掩码中。
176 
177     // TODO:  在此添加控件通知处理程序代码
178 }
179 
180 LRESULT CNew_MFC_TCP_SreverDlg::OnSocket(WPARAM wParam, LPARAM lParam)
181 {
182     CString str13;
183     char cs[100] = { 0 };
184     switch (lParam)
185     {
186 
187     case FD_ACCEPT:
188     {
189         int lenth = sizeof(addr1);
190         s1 = ::accept(s, (sockaddr*)&addr1, &lenth);
191         n = n + 1;
192         str13.Format("有%d客户已经连接上来了", n);
193         str13 += ::inet_ntoa(addr1.sin_addr);
194         str13 += "\r\n登录\r\n";
195         GetDlgItem(IDC_TEXT)->SetWindowText(str13);
196     }
197 
198     break;
199 
200     case FD_READ:
201     {
202         CString num = "";
203         ::recv(s1, cs, 100, 0);
204         GetDlgItem(IDC_TEXT)->GetWindowText(num);
205         num += "\r\n";
206         num += (LPTSTR)::inet_ntoa(addr1.sin_addr);
207         num += "对您说:";
208         num += (LPTSTR)cs;
209         GetDlgItem(IDC_TEXT)->SetWindowText(num);
210     }
211 
212     break;
213     }
214     return true;
215 }
点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
6个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
光头强的博客 光头强的博客
6个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
6个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
小森森 小森森
3天前
租房类微信小程序-基于微信云开发-小程序端集成了管理员后台-一键部署,快速发布
温馨提醒本项目使用MITLicense协议,仅适用于学习交流,并且不提供无偿的、不提供无偿的、不提供无偿的维护修改服务(但可提issue)。若直接将本项目用于商用,因本项目带来的所有后果由使用者自行承担。如需商用升级版,请联系我微信,微信二维码在本博客页面右上角在此奉劝某些人,请尊重作者的劳动成果,做人积点德吧!最近发现有人拿我的源码进行二次分
小森森 小森森
3天前
计划助手V1.0-微信小程序(QQ小程序)-源代码分享
疫情期间在家感觉好无聊啊,于是利用空闲时间做了一个用来记录和管理小目标时间的小程序,命名为《小沙漏》。QQ版本小程序同步上线,QQ小程序叫《时间小沙漏》,欢迎大家前来体验,后期也会添加其他的新功能哦【区别】:微信小程序的代码与QQ小程序的源码是不一样的。微信小程序的源码基于微信小程序云开发,需要在有网络的情况下使用,具有同步功能,所有记录在删除小
小森森 小森森
6个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
6个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
helloworld_28799839 helloworld_28799839
6个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue