基于iocp的SOCKET通讯软件的设计
来源:优易学  2011-12-26 16:38:18   【优易学:中国教育考试门户网】   资料下载   IT书店

  BOOL CSocketClientDlg::OnInitDialog()
  {
  CDialog::OnInitDialog();
  // 将\“关于...\”菜单项添加到系统菜单中。
  // IDM_ABOUTBOX 必须在系统命令范围内。
  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  ASSERT(IDM_ABOUTBOX < 0xF000);
  CMenu* pSysMenu = GetSystemMenu(FALSE);
  if (pSysMenu != NULL)
  {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
  pSysMenu->AppendMenu(MF_SEPARATOR);
  pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
  }
  // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  // 执行此操作
  SetIcon(m_hIcon, TRUE); // 设置大图标
  SetIcon(m_hIcon, FALSE); // 设置小图标
  // TODO: 在此添加额外的初始化代码
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  wVersionRequested = MAKEWORD( 2, 2 );
  err = WSAStartup( wVersionRequested, &wsaData );
  if ( err != 0 )
  {
  MessageBox("WSAStartup errors!\n");
  return FALSE;
  }
  if ( LOBYTE( wsaData.wVersion ) != 2 ||
  HIBYTE( wsaData.wVersion ) != 2 )
  {
  WSACleanup( );
  return FALSE;
  }
  sockClient = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, 0);
  if(INVALID_SOCKET == sockClient)
  {
  MessageBox("socket errors!\n");
  return FALSE;
  }
  return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
  }
  void CSocketClientDlg::OnSysCommand(UINT nID, LPARAM lParam)
  {
  if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
  }
  else
  {
  CDialog::OnSysCommand(nID, lParam);
  }
  }
  // 如果向对话框添加最小化按钮,则需要下面的代码
  // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  // 这将由框架自动完成。
  void CSocketClientDlg::OnPaint()
  {
  if (IsIconic())
  {
  CPaintDC dc(this); // 用于绘制的设备上下文
  SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  // 使图标在工作矩形中居中
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;
  // 绘制图标
  dc.DrawIcon(x, y, m_hIcon);
  }
  else
  {
  CDialog::OnPaint();
  }
  }
  //当用户拖动最小化窗口时系统调用此函数取得光标显示。
  HCURSOR CSocketClientDlg::OnQueryDragIcon()
  {
  return static_cast<HCURSOR>(m_hIcon);
  }
  void CSocketClientDlg::OnBnClickedSend()
  {
  // TODO: 在此添加控件通知处理程序代码
  CString strSend;
  GetDlgItem(IDC_EDIT_CONTENT)->GetWindowText(strSend);
  send(sockClient, strSend, strSend.GetLength()+1, 0);
  CString strRecord;
  GetDlgItem(IDC_EDIT_RECORD)->GetWindowText(strRecord);
  strRecord += strSend + "\r\n";
  GetDlgItem(IDC_EDIT_RECORD)->SetWindowText(strRecord);
  GetDlgItem(IDC_EDIT_CONTENT)->SetWindowText("");
  }
  void CSocketClientDlg::OnBnClickedBtnConnect()
  {
  // TODO: 在此添加控件通知处理程序代码
  CIPAddressCtrl* pIPAddressCtrl = (CIPAddressCtrl*)GetDlgItem(IDC_ADDR_SERVER);
  CString strAddrServer;
  pIPAddressCtrl->GetWindowText(strAddrServer);
  SOCKADDR_IN addrSvr;
  ZeroMemory(&addrSvr, sizeof(SOCKADDR_IN));
  addrSvr.sin_family = AF_INET;
  addrSvr.sin_port = htons(6000);
  addrSvr.sin_addr.S_un.S_addr = inet_addr(strAddrServer);
  while(1)
  {
  int nRet = connect(sockClient, (SOCKADDR*)&addrSvr, sizeof(SOCKADDR));
  if(SOCKET_ERROR == nRet)
  {
  continue;
  }
  else
  {
  break;
  }
  }
  CEdit* pEditRecord = (CEdit*)GetDlgItem(IDC_EDIT_RECORD);
  CString strText;
  pEditRecord->GetWindowText(strText);
  strText += "连接服务器成功!\r\n";
  pEditRecord->SetWindowText(strText);
  }

上一页  [1] [2] [3] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训