記錄點滴。服務器
服務端部分程序:網絡
1 //MySocket.h 2 3 // CMySocket 命令目標 4 5 #pragma once 6 7 #define SOCKET_EVENT WM_USER + 11 8 #define WM_MYMESSAGE WM_USER + 12 9 10 // 贊成鏈接 發送 接收 關閉 11 enum { ACCEPT = 0, SEND = 1, RETR = 2, CLOSE = 3 }; 12 13 14 class CMySocket : public CSocket 15 { 16 public: 17 CWnd *pWnd; 18 19 CMySocket(); 20 virtual ~CMySocket(); 21 22 void AttachCWnd(CWnd *pWnd); 23 virtual void OnSend(int nErrorCode); 24 virtual void OnReceive(int nErrorCode); 25 virtual void OnClose(int nErrorCode); 26 virtual void OnAccept(int nErrorCode); //接受鏈接 27 28 };
1 // MySocket.cpp : 實現文件 2 // 3 4 #include "stdafx.h" 5 #include "Socket_Server_HT.h" 6 #include "MySocket.h" 7 8 9 // CMySocket 10 11 CMySocket::CMySocket() 12 { 13 pWnd = NULL; 14 15 } 16 17 CMySocket::~CMySocket() 18 { 19 } 20 21 22 // CMySocket 成員函數 23 24 void CMySocket::AttachCWnd(CWnd *pW) 25 { 26 pWnd = pW; 27 } 28 29 void CMySocket::OnSend(int nErrorCode) 30 { 31 if (pWnd) 32 pWnd->SendMessage(SOCKET_EVENT, (WPARAM)this, SEND); 33 34 CSocket::OnSend(nErrorCode); 35 } 36 37 void CMySocket::OnReceive(int nErrorCode) 38 { 39 if (pWnd) 40 pWnd->SendMessage(SOCKET_EVENT, (WPARAM)this, RETR); 41 42 // CSocket收到數據觸發 OnReceive()函數 43 CSocket::OnReceive(nErrorCode); 44 } 45 46 void CMySocket::OnClose(int nErrorCode) 47 { 48 if (pWnd) 49 pWnd->SendMessage(SOCKET_EVENT, (WPARAM)this, CLOSE); 50 51 CSocket::OnClose(nErrorCode); 52 } 53 54 void CMySocket::OnAccept(int nErrorCode) 55 { 56 if (pWnd) 57 pWnd->SendMessage(SOCKET_EVENT, (WPARAM)this, ACCEPT); 58 59 CSocket::OnAccept(nErrorCode); 60 }
1 // Socket_Server_HTDlg.h : 頭文件 2 // 3 4 #pragma once 5 6 #include "MySocket.h" 7 8 // CSocket_Server_HTDlg 對話框 9 class CSocket_Server_HTDlg : public CDialogEx 10 { 11 // 構造 12 public: 13 CSocket_Server_HTDlg(CWnd* pParent = NULL); // 標準構造函數 14 15 // 對話框數據 16 enum { IDD = IDD_SOCKET_SERVER_HT_DIALOG }; 17 18 protected: 19 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 20 21 // 主 Socket 22 CMySocket server_socket; 23 24 // 接收發送數據 Socket 25 CMySocket sock; 26 27 void RecvText(CMySocket &from); 28 void SendText(CMySocket &from); 29 30 // 實現 31 protected: 32 HICON m_hIcon; 33 34 // 生成的消息映射函數 35 virtual BOOL OnInitDialog(); 36 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 37 afx_msg void OnPaint(); 38 39 // 根據消息參數解析網絡事件類型 40 LRESULT OnSocket(WPARAM wParam, LPARAM lParam); 41 //LRESULT OnAccept(WPARAM wParam, LPARAM lParam); 42 43 afx_msg HCURSOR OnQueryDragIcon(); 44 DECLARE_MESSAGE_MAP() 45 public: 46 CString m_ReceiveStr; 47 CString m_ReceiveStr_ID; 48 CString m_SendStr; 49 afx_msg void OnBnClickedButton1(); 50 afx_msg void OnEnChangeEdit2(); 51 52 afx_msg void OnBnClickedButton2(); 53 afx_msg void OnBnClickedButton3(); 54 };
1 // Socket_Server_HTDlg.cpp : 實現文件 2 // 3 4 #include "stdafx.h" 5 #include "Socket_Server_HT.h" 6 #include "Socket_Server_HTDlg.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 enum { IDD = IDD_ABOUTBOX }; 23 24 protected: 25 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 26 27 // 實現 28 protected: 29 DECLARE_MESSAGE_MAP() 30 }; 31 32 CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) 33 { 34 } 35 36 void CAboutDlg::DoDataExchange(CDataExchange* pDX) 37 { 38 CDialogEx::DoDataExchange(pDX); 39 } 40 41 BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) 42 END_MESSAGE_MAP() 43 44 45 // CSocket_Server_HTDlg 對話框 46 47 48 49 CSocket_Server_HTDlg::CSocket_Server_HTDlg(CWnd* pParent /*=NULL*/) 50 : CDialogEx(CSocket_Server_HTDlg::IDD, pParent) 51 , m_ReceiveStr(_T("")) 52 , m_ReceiveStr_ID(_T("")) 53 , m_SendStr(_T("")) 54 { 55 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 56 } 57 58 void CSocket_Server_HTDlg::DoDataExchange(CDataExchange* pDX) 59 { 60 CDialogEx::DoDataExchange(pDX); 61 DDX_Text(pDX, IDC_EDIT1, m_ReceiveStr); 62 DDX_Text(pDX, IDC_EDIT2, m_ReceiveStr_ID); 63 DDX_Text(pDX, IDC_EDIT3, m_SendStr); 64 } 65 66 BEGIN_MESSAGE_MAP(CSocket_Server_HTDlg, CDialogEx) 67 ON_WM_SYSCOMMAND() 68 ON_WM_PAINT() 69 ON_WM_QUERYDRAGICON() 70 ON_MESSAGE(SOCKET_EVENT, &CSocket_Server_HTDlg::OnSocket) 71 ON_BN_CLICKED(IDC_BUTTON1, &CSocket_Server_HTDlg::OnBnClickedButton1) 72 ON_EN_CHANGE(IDC_EDIT2, &CSocket_Server_HTDlg::OnEnChangeEdit2) 73 ON_BN_CLICKED(IDC_BUTTON2, &CSocket_Server_HTDlg::OnBnClickedButton2) 74 ON_BN_CLICKED(IDC_BUTTON3, &CSocket_Server_HTDlg::OnBnClickedButton3) 75 END_MESSAGE_MAP() 76 77 78 // CSocket_Server_HTDlg 消息處理程序 79 80 BOOL CSocket_Server_HTDlg::OnInitDialog() 81 { 82 CDialogEx::OnInitDialog(); 83 84 // 將「關於...」菜單項添加到系統菜單中。 85 86 // IDM_ABOUTBOX 必須在系統命令範圍內。 87 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 88 ASSERT(IDM_ABOUTBOX < 0xF000); 89 90 CMenu* pSysMenu = GetSystemMenu(FALSE); 91 if (pSysMenu != NULL) 92 { 93 BOOL bNameValid; 94 CString strAboutMenu; 95 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 96 ASSERT(bNameValid); 97 if (!strAboutMenu.IsEmpty()) 98 { 99 pSysMenu->AppendMenu(MF_SEPARATOR); 100 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 101 } 102 } 103 104 // 設置此對話框的圖標。 當應用程序主窗口不是對話框時,框架將自動 105 // 執行此操做 106 SetIcon(m_hIcon, TRUE); // 設置大圖標 107 SetIcon(m_hIcon, FALSE); // 設置小圖標 108 109 // TODO: 在此添加額外的初始化代碼 110 111 server_socket.AttachCWnd(this); 112 sock.AttachCWnd(this); //將鏈接綁定到本窗體 113 server_socket.Create(8001, SOCK_STREAM);// SOCK_STREAM表示TCP鏈接 114 server_socket.Listen(); // 監聽 115 116 117 return TRUE; // 除非將焦點設置到控件,不然返回 TRUE 118 } 119 120 void CSocket_Server_HTDlg::OnSysCommand(UINT nID, LPARAM lParam) 121 { 122 if ((nID & 0xFFF0) == IDM_ABOUTBOX) 123 { 124 CAboutDlg dlgAbout; 125 dlgAbout.DoModal(); 126 } 127 else 128 { 129 CDialogEx::OnSysCommand(nID, lParam); 130 } 131 } 132 133 // 若是向對話框添加最小化按鈕,則須要下面的代碼 134 // 來繪製該圖標。 對於使用文檔/視圖模型的 MFC 應用程序, 135 // 這將由框架自動完成。 136 137 void CSocket_Server_HTDlg::OnPaint() 138 { 139 if (IsIconic()) 140 { 141 CPaintDC dc(this); // 用於繪製的設備上下文 142 143 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 144 145 // 使圖標在工做區矩形中居中 146 int cxIcon = GetSystemMetrics(SM_CXICON); 147 int cyIcon = GetSystemMetrics(SM_CYICON); 148 CRect rect; 149 GetClientRect(&rect); 150 int x = (rect.Width() - cxIcon + 1) / 2; 151 int y = (rect.Height() - cyIcon + 1) / 2; 152 153 // 繪製圖標 154 dc.DrawIcon(x, y, m_hIcon); 155 } 156 else 157 { 158 CDialogEx::OnPaint(); 159 } 160 } 161 162 //當用戶拖動最小化窗口時系統調用此函數取得光標 163 //顯示。 164 HCURSOR CSocket_Server_HTDlg::OnQueryDragIcon() 165 { 166 return static_cast<HCURSOR>(m_hIcon); 167 } 168 169 //PMSG pMsg = AfxGetCurrentMessage(); 170 171 // wParam對應與相應客戶端通訊的SOCKET指針,也有多是主SOCKET,lParam對應事件類型 172 LRESULT CSocket_Server_HTDlg::OnSocket(WPARAM wParam, LPARAM lParam) 173 { 174 SOCKADDR_IN sockAddr;//IP地址、端口號等 175 int nSize = sizeof(sockAddr); 176 BOOL res; 177 178 switch (lParam) 179 { 180 //新的鏈接消息 181 case ACCEPT: 182 //主SOCKET指派新建立的SOCKET與客戶端通訊 183 res = server_socket.Accept(sock,(SOCKADDR *)&sockAddr, &nSize); 184 if (res == FALSE) 185 MessageBox(_T("Accept Error!")); 186 break; 187 188 case SEND: //發送消息 189 SendText(sock); 190 break; 191 192 case RETR: //收到數據消息 193 RecvText(sock); //解析消息 194 break; 195 196 case CLOSE: //鏈接關閉消息 197 break; 198 199 } 200 return TRUE; 201 } 202 203 204 void CSocket_Server_HTDlg::RecvText(CMySocket &from) 205 { 206 TCHAR RecvBuff[256]; //緩衝 207 TCHAR RecvBuffName[256]; 208 TCHAR RecvBuffID[256]; 209 int len, i, j; //長度 210 CString temp1, temp2; 211 212 memset(RecvBuff, 0, 256); 213 memset(RecvBuffName, 0, 256); 214 memset(RecvBuffID, 0, 256); 215 216 // 讀取數據 217 len = from.Receive(RecvBuff, 256); 218 219 // 測試用,能夠發送 220 //from->Send(RecvBuff, 256); 221 222 if (len < 1) 223 return; 224 225 for (i = 0; i < 256; i++) 226 {// 爲了使發過來的姓名和學號分開顯示 227 if (RecvBuff[i] != '@') 228 { 229 RecvBuffName[i] = RecvBuff[i]; 230 } 231 else 232 { 233 break; 234 } 235 } 236 237 ++i; 238 for (j = 0; j < (256-i); j++) 239 { 240 RecvBuffID[j] = RecvBuff[i]; 241 ++i; 242 } 243 244 temp1.Format(_T("%s"), RecvBuffName); 245 m_ReceiveStr += temp1; 246 m_ReceiveStr.Append(_T("\r\n")); 247 248 temp2.Format(_T("%s"), RecvBuffID); 249 m_ReceiveStr_ID += temp2; 250 m_ReceiveStr_ID.Append(_T("\r\n")); 251 252 UpdateData(FALSE); 253 } 254 255 void CSocket_Server_HTDlg::SendText(CMySocket &from) 256 { 257 UpdateData(TRUE); 258 int len1 = m_SendStr.GetLength(); 259 char* p = (char*)m_SendStr.GetBuffer(0); 260 261 from.Send(p, len1*2); 262 263 //測試用 264 //MessageBox(_T("Send OK")); 265 } 266 267 void CSocket_Server_HTDlg::OnBnClickedButton1() 268 { 269 // TODO: 在此添加控件通知處理程序代碼 270 271 m_ReceiveStr = _T(""); 272 m_ReceiveStr_ID = _T(""); 273 UpdateData(FALSE); 274 } 275 276 277 void CSocket_Server_HTDlg::OnEnChangeEdit2() 278 { 279 // TODO: 若是該控件是 RICHEDIT 控件,它將不 280 // 發送此通知,除非重寫 CDialogEx::OnInitDialog() 281 // 函數並調用 CRichEditCtrl().SetEventMask(), 282 // 同時將 ENM_CHANGE 標誌「或」運算到掩碼中。 283 284 // TODO: 在此添加控件通知處理程序代碼 285 } 286 287 288 void CSocket_Server_HTDlg::OnBnClickedButton2() 289 { 290 // TODO: 在此添加控件通知處理程序代碼 291 292 // 模擬發送消息 293 server_socket.OnSend(0); 294 295 } 296 297 298 void CSocket_Server_HTDlg::OnBnClickedButton3() 299 { 300 // TODO: 在此添加控件通知處理程序代碼 301 302 m_SendStr = _T(""); 303 UpdateData(FALSE); 304 }
客戶端部分程序:框架
1 /* 2 2015.4 HT 3 將Socket封裝成適合本工程的模塊 4 5 MySocket.h 6 */ 7 8 #pragma once 9 10 #define SOCKET_EVENT WM_USER + 10 11 12 enum { ACCEPT = 0, SEND = 1, RETR = 2, CLOSE = 3 }; 13 14 class MySocket : public CSocket 15 { 16 public: 17 MySocket(); 18 virtual ~MySocket(); 19 20 // 綁定的窗體 21 CWnd *pWnd; 22 23 // 窗體綁定 24 void AttachCWnd(CWnd *pWnd); 25 26 virtual void OnReceive(int nErrorCode); 27 virtual void OnClose(int nErrorCode); 28 29 };
1 // MySocket.cpp : 實現文件 2 // 3 4 #include "stdafx.h" 5 #include "Socket_Client_HT.h" 6 #include "MySocket.h" 7 8 9 // MySocket 10 11 MySocket::MySocket() 12 { 13 pWnd = NULL; 14 } 15 16 MySocket::~MySocket() 17 { 18 } 19 20 21 // MySocket 成員函數 22 23 // CWnd是WINDOWS的一個基類,對話框,按鈕等都是從它派生過來 24 void MySocket::AttachCWnd(CWnd *pW) 25 { 26 pWnd = pW; 27 } 28 29 void MySocket::OnReceive(int nErrorCode) 30 { 31 if (pWnd) 32 pWnd->SendMessage(SOCKET_EVENT, (long)this, RETR); 33 34 CSocket::OnReceive(nErrorCode); 35 } 36 37 void MySocket::OnClose(int nErrorCode) 38 { 39 if (pWnd) 40 pWnd->SendMessage(SOCKET_EVENT, (long)this, CLOSE); 41 42 CSocket::OnClose(nErrorCode); 43 }
1 // Socket_Client_HTDlg.h : 頭文件 2 // 3 4 #pragma once 5 6 #include "MySocket.h" 7 #include "afxcmn.h" 8 9 10 // CSocket_Client_HTDlg 對話框 11 class CSocket_Client_HTDlg : public CDialogEx 12 { 13 // 構造 14 public: 15 16 17 MySocket clientSocket; // 建立自定義客戶端socket 18 CString m_ipAddr; // IP 地址 19 20 CSocket_Client_HTDlg(CWnd* pParent = NULL); // 標準構造函數 21 22 // 對話框數據 23 enum { IDD = IDD_SOCKET_CLIENT_HT_DIALOG }; 24 25 protected: 26 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 27 28 29 // 實現 30 protected: 31 HICON m_hIcon; 32 33 // 生成的消息映射函數 34 virtual BOOL OnInitDialog(); 35 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 36 afx_msg void OnPaint(); 37 38 // 自定義消息接收函數 39 afx_msg LRESULT RecvText(WPARAM wParam, LPARAM lParam); 40 41 afx_msg HCURSOR OnQueryDragIcon(); 42 DECLARE_MESSAGE_MAP() 43 public: 44 CIPAddressCtrl m_IP; 45 CString m_SendStr; 46 CString m_SendStrNum; 47 CString m_ReceiveStr; 48 afx_msg void OnBnClickedButton1(); 49 afx_msg void OnBnClickedButton2(); 50 afx_msg void OnBnClickedButton3(); 51 afx_msg void OnBnClickedButton4(); 52 53 };
1 // Socket_Client_HTDlg.cpp : 實現文件 2 // 3 4 #include "stdafx.h" 5 #include "Socket_Client_HT.h" 6 #include "Socket_Client_HTDlg.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 enum { IDD = IDD_ABOUTBOX }; 23 24 protected: 25 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 26 27 // 實現 28 protected: 29 DECLARE_MESSAGE_MAP() 30 }; 31 32 CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) 33 { 34 } 35 36 void CAboutDlg::DoDataExchange(CDataExchange* pDX) 37 { 38 CDialogEx::DoDataExchange(pDX); 39 } 40 41 BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) 42 END_MESSAGE_MAP() 43 44 45 // CSocket_Client_HTDlg 對話框 46 47 48 49 CSocket_Client_HTDlg::CSocket_Client_HTDlg(CWnd* pParent /*=NULL*/) 50 : CDialogEx(CSocket_Client_HTDlg::IDD, pParent) 51 , m_SendStr(_T("")) 52 , m_ReceiveStr(_T("")) 53 , m_SendStrNum(_T("")) 54 { 55 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 56 } 57 58 void CSocket_Client_HTDlg::DoDataExchange(CDataExchange* pDX) 59 { 60 CDialogEx::DoDataExchange(pDX); 61 DDX_Control(pDX, IDC_IPADDRESS1, m_IP); 62 DDX_Text(pDX, IDC_EDIT1, m_SendStr); 63 DDX_Text(pDX, IDC_EDIT2, m_ReceiveStr); 64 DDX_Text(pDX, IDC_EDIT3, m_SendStrNum); 65 } 66 67 BEGIN_MESSAGE_MAP(CSocket_Client_HTDlg, CDialogEx) 68 ON_WM_SYSCOMMAND() 69 ON_WM_PAINT() 70 ON_WM_QUERYDRAGICON() 71 ON_MESSAGE(SOCKET_EVENT, &CSocket_Client_HTDlg::RecvText) 72 ON_BN_CLICKED(IDC_BUTTON1, &CSocket_Client_HTDlg::OnBnClickedButton1) 73 ON_BN_CLICKED(IDC_BUTTON2, &CSocket_Client_HTDlg::OnBnClickedButton2) 74 ON_BN_CLICKED(IDC_BUTTON3, &CSocket_Client_HTDlg::OnBnClickedButton3) 75 ON_BN_CLICKED(IDC_BUTTON4, &CSocket_Client_HTDlg::OnBnClickedButton4) 76 END_MESSAGE_MAP() 77 78 79 // CSocket_Client_HTDlg 消息處理程序 80 81 BOOL CSocket_Client_HTDlg::OnInitDialog() 82 { 83 CDialogEx::OnInitDialog(); 84 85 // 將「關於...」菜單項添加到系統菜單中。 86 87 // IDM_ABOUTBOX 必須在系統命令範圍內。 88 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 89 ASSERT(IDM_ABOUTBOX < 0xF000); 90 91 CMenu* pSysMenu = GetSystemMenu(FALSE); 92 if (pSysMenu != NULL) 93 { 94 BOOL bNameValid; 95 CString strAboutMenu; 96 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 97 ASSERT(bNameValid); 98 if (!strAboutMenu.IsEmpty()) 99 { 100 pSysMenu->AppendMenu(MF_SEPARATOR); 101 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 102 } 103 } 104 105 // 設置此對話框的圖標。 當應用程序主窗口不是對話框時,框架將自動 106 // 執行此操做 107 SetIcon(m_hIcon, TRUE); // 設置大圖標 108 SetIcon(m_hIcon, FALSE); // 設置小圖標 109 110 // TODO: 在此添加額外的初始化代碼 111 112 113 m_IP.SetWindowText(_T("127.0.0.1")); 114 115 // 把SOCKET與對話框聯繫起來,SOCKET有消息就通知本對話框 116 clientSocket.AttachCWnd(this); 117 // SOCKET初始化 118 clientSocket.Create(); 119 120 return TRUE; // 除非將焦點設置到控件,不然返回 TRUE 121 } 122 123 void CSocket_Client_HTDlg::OnSysCommand(UINT nID, LPARAM lParam) 124 { 125 if ((nID & 0xFFF0) == IDM_ABOUTBOX) 126 { 127 CAboutDlg dlgAbout; 128 dlgAbout.DoModal(); 129 } 130 else 131 { 132 CDialogEx::OnSysCommand(nID, lParam); 133 } 134 } 135 136 // 若是向對話框添加最小化按鈕,則須要下面的代碼 137 // 來繪製該圖標。 對於使用文檔/視圖模型的 MFC 應用程序, 138 // 這將由框架自動完成。 139 140 void CSocket_Client_HTDlg::OnPaint() 141 { 142 if (IsIconic()) 143 { 144 CPaintDC dc(this); // 用於繪製的設備上下文 145 146 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 147 148 // 使圖標在工做區矩形中居中 149 int cxIcon = GetSystemMetrics(SM_CXICON); 150 int cyIcon = GetSystemMetrics(SM_CYICON); 151 CRect rect; 152 GetClientRect(&rect); 153 int x = (rect.Width() - cxIcon + 1) / 2; 154 int y = (rect.Height() - cyIcon + 1) / 2; 155 156 // 繪製圖標 157 dc.DrawIcon(x, y, m_hIcon); 158 } 159 else 160 { 161 CDialogEx::OnPaint(); 162 } 163 } 164 165 //當用戶拖動最小化窗口時系統調用此函數取得光標 166 //顯示。 167 HCURSOR CSocket_Client_HTDlg::OnQueryDragIcon() 168 { 169 return static_cast<HCURSOR>(m_hIcon); 170 } 171 172 int Alen = 0; //總長度 173 LRESULT CSocket_Client_HTDlg::RecvText(WPARAM wParam, LPARAM lParam) 174 { 175 TCHAR RecvBuff[256]; //緩衝 176 int len; //長度 177 CString temp; 178 memset(RecvBuff, 0, 256); 179 if (RETR == lParam) 180 { 181 // 讀取數據 182 len = clientSocket.Receive(RecvBuff, 256); 183 Alen += len; 184 if (len < 1) 185 return TRUE; 186 temp.Format(_T("%s"), RecvBuff); 187 m_ReceiveStr += temp; 188 //m_ReceiveStr.Append(_T("\r\n")); 189 UpdateData(FALSE); 190 } 191 192 if (Alen > 56) 193 { 194 Alen = 0; 195 m_ReceiveStr.Append(_T("\r\n")); 196 UpdateData(FALSE); 197 } 198 199 //UpdateData(FALSE); 200 return TRUE; 201 } 202 203 204 205 void CSocket_Client_HTDlg::OnBnClickedButton1() 206 { 207 // TODO: 在此添加控件通知處理程序代碼 208 209 // 發送框 210 UpdateData(TRUE); 211 212 int len1 = m_SendStr.GetLength(); 213 int len2 = m_SendStrNum.GetLength(); 214 char* p = (char*)m_SendStr.GetBuffer(0); 215 char* q = (char*)m_SendStrNum.GetBuffer(0); 216 217 clientSocket.Send(p, len1*2); 218 clientSocket.Send("@",2); 219 clientSocket.Send(q, len2*2); 220 221 UpdateData(FALSE); 222 } 223 224 225 void CSocket_Client_HTDlg::OnBnClickedButton2() 226 { 227 // TODO: 在此添加控件通知處理程序代碼 228 229 m_SendStr = _T(""); 230 m_SendStrNum = _T(""); 231 UpdateData(FALSE); 232 } 233 234 235 void CSocket_Client_HTDlg::OnBnClickedButton3() 236 { 237 // TODO: 在此添加控件通知處理程序代碼 238 239 m_ReceiveStr = _T(""); 240 UpdateData(FALSE); 241 } 242 243 244 void CSocket_Client_HTDlg::OnBnClickedButton4() 245 { 246 // TODO: 在此添加控件通知處理程序代碼 247 248 UpdateData(TRUE); 249 LPTSTR lpstr = 0; 250 m_IP.GetWindowText(lpstr, 16); 251 // 得到IP地址 252 m_ipAddr = lpstr; 253 254 // Socket鏈接服務器 255 if (clientSocket.Connect(m_ipAddr, 8001) == FALSE) 256 { 257 MessageBox(_T("鏈接失敗!")); 258 } 259 260 }