这一节实例主要实现使用服务器和客户端进行通信。
设计流程图如下:
具体操作步骤如下:
创建服务器基本对话框:
- 项目------MFC App----Dialog base---Windows Sockets
- 添加控件:
- 添加成员变量及按键消息处理函数
-
1 ///////////////////////////////////////////////////////////////////////////// 2 // CServerDlg dialog 3 4 class CServerDlg : public CDialog 5 { 6 public: 7 CSocket serSock; 8 CSocket ChatSendSock; 9 // Construction 10 public: 11 CServerDlg(CWnd* pParent = NULL); // standard constructor 12 13 // Dialog Data 14 //{{AFX_DATA(CServerDlg) 15 enum { IDD = IDD_SERVER_DIALOG }; 16 CString m_edit; 17 //}}AFX_DATA 18 19 // ClassWizard generated virtual function overrides 20 //{{AFX_VIRTUAL(CServerDlg) 21 protected: 22 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 23 //}}AFX_VIRTUAL 24 25 // Implementation 26 protected: 27 HICON m_hIcon; 28 29 // Generated message map functions 30 //{{AFX_MSG(CServerDlg) 31 virtual BOOL OnInitDialog(); 32 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 33 afx_msg void OnPaint(); 34 afx_msg HCURSOR OnQueryDragIcon(); 35 afx_msg void OnBtnExit(); 36 afx_msg void OnBtnSend(); 37 //}}AFX_MSG 38 DECLARE_MESSAGE_MAP() 39 };
添加CSocket对象变量
-
1 void CServerDlg::OnBtnExit() 2 { 3 // TODO: Add your control notification handler code here 4 CServerDlg::OnOK(); 5 } 6 7 void CServerDlg::OnBtnSend() 8 { 9 // TODO: Add your control notification handler code here 10 CString str; 11 UpdateData(TRUE); 12 str=m_edit; 13 unsigned int nPort=5050; 14 if(!ChatSendSock.Create(nPort)) 15 { 16 MessageBox("Create failed."); 17 } 18 else 19 { 20 ChatSendSock.Bind(nPort); 21 ChatSendSock.Listen(); 22 ChatSendSock.Accept(serSock); 23 } 24 serSock.Send(str,1000,0); 25 serSock.Close(); 26 ChatSendSock.Close(); 27 }
添加按键消息事件处理函数
- 编译.完成服务器设计
创建客户端基本对话框:
- 项目------MFC App----Dialog base---Windows Sockets
- 添加控件
- 添加成员变量及按键消息事件处理函数
-
1 ///////////////////////////////////////////////////////////////////////////// 2 // CClientSockDlg dialog 3 4 class CClientSockDlg : public CDialog 5 { 6 public: 7 CSocket ChatReceive; 8 9 // Construction 10 public: 11 CClientSockDlg(CWnd* pParent = NULL); // standard constructor 12 13 // Dialog Data 14 //{{AFX_DATA(CClientSockDlg) 15 enum { IDD = IDD_CLIENTSOCK_DIALOG }; 16 CString m_edit; 17 //}}AFX_DATA 18 19 // ClassWizard generated virtual function overrides 20 //{{AFX_VIRTUAL(CClientSockDlg) 21 protected: 22 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 23 //}}AFX_VIRTUAL 24 25 // Implementation 26 protected: 27 HICON m_hIcon; 28 29 // Generated message map functions 30 //{{AFX_MSG(CClientSockDlg) 31 virtual BOOL OnInitDialog(); 32 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 33 afx_msg void OnPaint(); 34 afx_msg HCURSOR OnQueryDragIcon(); 35 afx_msg void OnBtnExit(); 36 afx_msg void OnBtnReceive(); 37 //}}AFX_MSG 38 DECLARE_MESSAGE_MAP() 39 };
添加CSocket对象变量
-
1 void CClientSockDlg::OnBtnExit() 2 { 3 // TODO: Add your control notification handler code here 4 CClientSockDlg::OnOK(); 5 } 6 7 void CClientSockDlg::OnBtnReceive() 8 { 9 // TODO: Add your control notification handler code here 10 CString IPv4_address="192.168.222.111"; 11 unsigned int nPort=5050; 12 if(!ChatReceive.Create()) 13 { 14 MessageBox("Create failed."); 15 return; 16 } 17 else 18 { 19 ChatReceive.Connect(IPv4_address,nPort); 20 } 21 char rx_buffer[1024]; 22 IPv4_address.Format(rx_buffer); 23 ChatReceive.Receive(rx_buffer,1024,0); 24 m_edit=rx_buffer; 25 UpdateData(FALSE); 26 ChatReceive.Close(); 27 }
添加按键消息处理函数
- 编译,完成客户端设计。
运行测试:
- 运行服务器,在编辑框输入发送的字符串,点击Send按键;
- 运行客服端,点击Receive按键,接收服务器发送过来的字符串。
- 完成测试。
谢谢.