Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
您现在的位置: 天极网 > 开发频道 > 利用CAsyncSocket类实现Socket编程
全文

利用CAsyncSocket类实现Socket编程

2004-05-21 16:36 作者: 出处: 常州vc网 责任编辑:方舟
  建一对话框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类会自动处理。

共3页。 9 1 2 3 :
共3页。 9 1 2 3 :
网友关注
最新上市
编辑推荐
文章阅读排行
周排行
月排行
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml