MFC_TCP_Server

Stella981
• 阅读 767

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 }
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这