标签:发送信息 技术 范围 net 工作区 bubuko ble comm 字符串
1 // New_MFC_TCP_ClientDlg.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "New_MFC_TCP_Client.h" 6 #include "New_MFC_TCP_ClientDlg.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_ClientDlg 对话框 48 49 50 51 CNew_MFC_TCP_ClientDlg::CNew_MFC_TCP_ClientDlg(CWnd* pParent /*=NULL*/) 52 : CDialogEx(IDD_NEW_MFC_TCP_CLIENT_DIALOG, pParent) 53 { 54 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 55 } 56 57 void CNew_MFC_TCP_ClientDlg::DoDataExchange(CDataExchange* pDX) 58 { 59 CDialogEx::DoDataExchange(pDX); 60 } 61 62 BEGIN_MESSAGE_MAP(CNew_MFC_TCP_ClientDlg, CDialogEx) 63 ON_MESSAGE(WM_SOCKET,OnSocket) 64 ON_WM_SYSCOMMAND() 65 ON_WM_PAINT() 66 ON_WM_QUERYDRAGICON() 67 ON_BN_CLICKED(IDC_CONNECT, &CNew_MFC_TCP_ClientDlg::OnBnClickedConnect) 68 ON_BN_CLICKED(IDC_SEND, &CNew_MFC_TCP_ClientDlg::OnBnClickedSend) 69 END_MESSAGE_MAP() 70 71 72 // CNew_MFC_TCP_ClientDlg 消息处理程序 73 74 BOOL CNew_MFC_TCP_ClientDlg::OnInitDialog() 75 { 76 CDialogEx::OnInitDialog(); 77 78 // 将“关于...”菜单项添加到系统菜单中。 79 80 // IDM_ABOUTBOX 必须在系统命令范围内。 81 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 82 ASSERT(IDM_ABOUTBOX < 0xF000); 83 84 CMenu* pSysMenu = GetSystemMenu(FALSE); 85 if (pSysMenu != NULL) 86 { 87 BOOL bNameValid; 88 CString strAboutMenu; 89 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 90 ASSERT(bNameValid); 91 if (!strAboutMenu.IsEmpty()) 92 { 93 pSysMenu->AppendMenu(MF_SEPARATOR); 94 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 95 } 96 } 97 98 // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 99 // 执行此操作 100 SetIcon(m_hIcon, TRUE); // 设置大图标 101 SetIcon(m_hIcon, FALSE); // 设置小图标 102 103 // TODO: 在此添加额外的初始化代码 104 105 106 //开始时禁用部分控件 107 GetDlgItem(IDC_TEXT)->EnableWindow(false); 108 GetDlgItem(IDC_TEXT)->EnableWindow(false); 109 GetDlgItem(IDC_TEXT)->EnableWindow(false); 110 111 s = ::socket(AF_INET, SOCK_STREAM, 0); //创建套接字并返回句柄 112 113 ::WSAAsyncSelect(s, this->m_hWnd, WM_SOCKET, FD_READ); 114 115 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE 116 } 117 118 void CNew_MFC_TCP_ClientDlg::OnSysCommand(UINT nID, LPARAM lParam) 119 { 120 if ((nID & 0xFFF0) == IDM_ABOUTBOX) 121 { 122 CAboutDlg dlgAbout; 123 dlgAbout.DoModal(); 124 } 125 else 126 { 127 CDialogEx::OnSysCommand(nID, lParam); 128 } 129 } 130 131 // 如果向对话框添加最小化按钮,则需要下面的代码 132 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, 133 // 这将由框架自动完成。 134 135 void CNew_MFC_TCP_ClientDlg::OnPaint() 136 { 137 if (IsIconic()) 138 { 139 CPaintDC dc(this); // 用于绘制的设备上下文 140 141 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 142 143 // 使图标在工作区矩形中居中 144 int cxIcon = GetSystemMetrics(SM_CXICON); 145 int cyIcon = GetSystemMetrics(SM_CYICON); 146 CRect rect; 147 GetClientRect(&rect); 148 int x = (rect.Width() - cxIcon + 1) / 2; 149 int y = (rect.Height() - cyIcon + 1) / 2; 150 151 // 绘制图标 152 dc.DrawIcon(x, y, m_hIcon); 153 } 154 else 155 { 156 CDialogEx::OnPaint(); 157 } 158 } 159 160 //当用户拖动最小化窗口时系统调用此函数取得光标 161 //显示。 162 HCURSOR CNew_MFC_TCP_ClientDlg::OnQueryDragIcon() 163 { 164 return static_cast<HCURSOR>(m_hIcon); 165 } 166 167 168 169 void CNew_MFC_TCP_ClientDlg::OnBnClickedConnect() 170 { 171 // TODO: 在此添加控件通知处理程序代码 172 173 //定义字符串变量 174 CString str; 175 CString str1; 176 int port; //定义端口号 177 178 GetDlgItem(IDC_ADDR)->GetWindowText(str); //获取服务器地址 179 GetDlgItem(IDC_PORT)->GetWindowText(str1); //获取端口号 180 181 182 if (str == "" || str1 == "") 183 { 184 MessageBox("服务器地址或端口不能为空"); 185 } 186 else 187 { 188 port = atoi(str1.GetBuffer(1)); //将字符串转换为数字 189 addr.sin_family = AF_INET; 190 addr.sin_addr.S_un.S_addr = inet_addr(str.GetBuffer(1)); //转换服务器IP地址 191 192 addr.sin_port = ntohs(port); 193 GetDlgItem(IDC_TEXT)->SetWindowText("正在连接服务器\r\n"); 194 195 if (::connect(s, (sockaddr*)&addr, sizeof(addr))) 196 { 197 GetDlgItem(IDC_TEXT)->GetWindowText(str); 198 str += "服务器连接成功\r\n"; 199 GetDlgItem(IDC_TEXT)->SetWindowText(str); 200 GetDlgItem(IDC_SENDTEXT)->EnableWindow(true); 201 //设置控件的状态 202 GetDlgItem(IDC_SEND)->EnableWindow(true); 203 GetDlgItem(IDC_ADDR)->EnableWindow(false); 204 GetDlgItem(IDC_PORT)->EnableWindow(false); 205 } 206 else 207 { 208 GetDlgItem(IDC_TEXT)->GetWindowText(str); 209 str += "连接服务器失败!请重试\r\n"; 210 GetDlgItem(IDC_TEXT)->SetWindowText(str); 211 212 } 213 } 214 215 216 217 218 219 220 221 } 222 223 224 void CNew_MFC_TCP_ClientDlg::OnBnClickedSend() 225 { 226 // TODO: 在此添加控件通知处理程序代码 227 CString str; 228 CString str1; 229 GetDlgItem(IDC_SENDTEXT)->GetWindowText(str); //获取用户发送信息的字符串 230 if (str == "") 231 { 232 GetDlgItem(IDC_TEXT)->GetWindowText(str1); 233 str1 += "\r\n"; 234 str1 += "消息不能为空"; 235 GetDlgItem(IDC_TEXT)->SetWindowText(str1); 236 237 } 238 else 239 { 240 ::send(s, str.GetBuffer(1), str.GetLength(), 0); //发送消息到指定服务器 241 GetDlgItem(IDC_TEXT)->GetWindowText(str1); 242 str1 += "\r\n"; 243 str1 += str; 244 GetDlgItem(IDC_TEXT)->SetWindowText(str1); 245 246 247 } 248 } 249 250 251 LRESULT CNew_MFC_TCP_ClientDlg::OnSocket(WPARAM wParam, LPARAM lParam) 252 { 253 char cs[100] = {0}; //定义缓冲区 254 255 if (lParam == FD_READ) //如果是套子接读取时间 256 { 257 CString num =""; 258 recv(s, cs, 100, NULL); //接收数据 259 GetDlgItem(IDC_TEXT)->GetWindowText(num); 260 num += "\r\n服务器说:"; 261 num += (LPTSTR)cs; 262 GetDlgItem(IDC_TEXT)->SetWindowText(num); 263 } 264 return true; 265 }
1 // New_MFC_TCP_ClientDlg.h : 头文件 2 // 3 #define WM_SOCKET WM_USER + 100 4 #pragma once 5 6 7 // CNew_MFC_TCP_ClientDlg 对话框 8 class CNew_MFC_TCP_ClientDlg : public CDialogEx 9 { 10 // 构造 11 public: 12 CNew_MFC_TCP_ClientDlg(CWnd* pParent = NULL); // 标准构造函数 13 14 SOCKET s; //定义套子接对象 15 sockaddr_in addr; //定义套子接地址结构变量 16 17 afx_msg LRESULT OnSocket(WPARAM wParam, LPARAM lParam); 18 19 // 对话框数据 20 #ifdef AFX_DESIGN_TIME 21 enum { IDD = IDD_NEW_MFC_TCP_CLIENT_DIALOG }; 22 #endif 23 24 protected: 25 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 26 27 28 // 实现 29 protected: 30 HICON m_hIcon; 31 32 // 生成的消息映射函数 33 virtual BOOL OnInitDialog(); 34 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 35 afx_msg void OnPaint(); 36 afx_msg HCURSOR OnQueryDragIcon(); 37 DECLARE_MESSAGE_MAP() 38 public: 39 afx_msg void OnBnClickedConnect(); 40 afx_msg void OnBnClickedSend(); 41 };
标签:发送信息 技术 范围 net 工作区 bubuko ble comm 字符串
原文地址:https://www.cnblogs.com/zuoluokeji/p/9488851.html