• 网络编程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. 完成测试。

    谢谢.

  • 相关阅读:
    hibernate&查询
    hibernate&一对多&多对多
    hibernate&三种状态的对象&一级缓存&快照机制
    Hibernate5.0安装&基本配置&基本使用
    python获取命令行输入的参数
    node.js + express搭建服务流程
    xpath获取两个标签之间的所有标签
    flask快速入门
    03.调用js执行代码
    02.5 js中的语法知识补充
  • 原文地址:https://www.cnblogs.com/lumao1122-Milolu/p/11752235.html
Copyright © 2020-2023  润新知