科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件利用CAsyncSocket类实现Socket编程

利用CAsyncSocket类实现Socket编程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

VC 的MFC类库中提供了CAsyncSocket这样一个套接字类,用它来实现Socket编程,是非常方便的。

作者:佚名 来源:常州vc网 2007年10月20日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
建一对话框IDD_Addr,用来输入IP地址和Port;增加两个Edit控件:IDC_Addr、IDC_Port按下表在ClassWizard中为CAddrDlg类添加变量。

Control ID Type Member
IDC_Addr CString m_Addr
IDC_Port Int m_Port
在CSockClientDlg.ccp中添加代码:
#include "AddrDlg.h"
protected:
int TryCount;
MySock m_clientSocket;
UINT m_szPort;
public:
char m_szServerAdr[256];

  双击IDD_CSOCKCLIENT_DIALOG对话框中的“连接”按钮,添加以下代码:

m_clientSocket.ShutDown(2);
m_clientSocket.m_hSocket=INVALID_SOCKET;
m_clientSocket.m_bConnected=FALSE;
CAddrDlg m_Dlg;
m_Dlg.m_Port=1088;//默认端口1088
if (m_Dlg.DoModal()==IDOK && !m_Dlg.m_Addr.IsEmpty())
{
 memcpy(m_szServerAdr,m_Dlg.m_Addr,sizeof(m_szServerAdr));
 m_szPort=m_Dlg.m_Port;
 SetTimer(1,1000,NULL);//建立计时器,每1秒尝试连接一次
 TryCount=0;
}

  添加Windows消息WM_TIMER响应函数OnTimer

void CCSockClientDlg::OnTimer(UINT nIDEvent)
{
 if (m_clientSocket.m_hSocket==INVALID_SOCKET)
 {
  BOOL bFlag=m_clientSocket.Create(0,SOCK_STREAM,FD_CONNECT);
  if(!bFlag)
  {
   AfxMessageBox("Socket Error!");
   m_clientSocket.Close();
   PostQuitMessage(0);
   return;
  }
 }
 m_clientSocket.Connect(m_szServerAdr,m_szPort);
 TryCount++;
 if (TryCount >=10 || m_clientSocket.m_bConnected)
 {
  KillTimer(1);
  if (TryCount >=10)
   AfxMessageBox("Connect Failed!");
   return;
 }
 CDialog::OnTimer(nIDEvent);
}


  双击IDD_CSOCKCLIENT_DIALOG对话框中的“发送”按钮,添加以下代码:

void CCSockClientDlg::OnSend()
{
 if (m_clientSocket.m_bConnected)
 {
  m_clientSocket.m_nLength=m_MSG.GetWindowText(m_clientSocket.m_szBuffer, sizeof(m_clientSocket.m_szBuffer));
  m_clientSocket.AsyncSelect(FD_WRITE);
  m_MSG.SetWindowText("");
 }
}

  双击IDD_CSOCKCLIENT_DIALOG对话框中的“关闭”按钮,添加以下代码:

void CCSockClientDlg::OnExit()
{
 m_clientSocket.ShutDown(2); //关闭Socket
 EndDialog(0);
}

  运行此项目,连接时输入主机名或IP均可,CAsyncSocket类会自动处理。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章