网络编程socket套接字及其使用(三)

这一节实例主要实现使用服务器和客户端进行通信。

设计流程图如下:

具体操作步骤如下:

创建服务器基本对话框:

  1. 项目------MFC App----Dialog base---Windows Sockets
  2. 添加控件:
  3. 添加成员变量及按键消息处理函数
  4.  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对象变量

  5.  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 }

    添加按键消息事件处理函数

  6. 编译.完成服务器设计

创建客户端基本对话框:

  1. 项目------MFC App----Dialog base---Windows Sockets
  2. 添加控件
  3. 添加成员变量及按键消息事件处理函数
  4.  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对象变量

  5.  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 }

    添加按键消息处理函数

  6. 编译,完成客户端设计。

运行测试:

  1. 运行服务器,在编辑框输入发送的字符串,点击Send按键;
  2. 运行客服端,点击Receive按键,接收服务器发送过来的字符串。
  3. 完成测试。

谢谢.

posted on 2019-10-28 14:49  Milo_lu  阅读(160)  评论(0编辑  收藏  举报

导航