码迷,mamicode.com
首页 > 编程语言 > 详细

MFC_TCP_Server

时间:2018-08-16 20:01:02      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:his   ase   mask   初始化   绘制   ESS   form   分享   metrics   

技术分享图片

 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 }

 

MFC_TCP_Server

标签:his   ase   mask   初始化   绘制   ESS   form   分享   metrics   

原文地址:https://www.cnblogs.com/zuoluokeji/p/9488865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!