CAsyncSocket

CAsyncSocket对象表示一个Windows Socket:一个网络通信的末端。CAsyncSocket类封闭了Windows套接字API,对想使用与MFC连接的Windows套接字的程序员提供了一个面向对象的抽象化概念。
此类是假设已经理解了网络的通信的前提下的。负责处理块、字节排序差异以及Unicode和多个字符集(MBCS)串的对话。如果想要一个更方便的处理这些问题的接口,请参阅CSocket类。
要使用一个CAsyncSocket对象,调用它的构造程序,然后调用Create函数,创建一个基础套接字句柄(SOCKET类型),除了接收型套接字之外。对于一个服务器套接字调用Listen成员函数,对于一个客户套接字调用Connect成员函数。在接收一个连接请求时,服务器套接字应该调用一个Accept函数。使用保留的CAsyncSocket函数解决套接字之间的通信。完成之后,如果它是在堆上被创建的,就废弃掉CAsyncSocket对象。析构程序自动调用Close函数。SOCKET数据类型在联机文档“Visual C++程序员指南”中的“Windows套接字背景”章节中有所描述。
如果要了解更多信息,请参阅联机文档 “Visual C++程序员指南”中的“Windows套接字:使用CAsyncSocket类”和相关章节以及联机文档“Win32 SDK”中的“Windows套接字2的概述”和“Windows套接字编程指南”。
#include <afxsock.h>

继承CAsyncSocket类,创建自己的类CMySocket,在mySocket.h头文件中,如下
#ifndef __SOCKET__
#define __SOCKET__
#include "mainUnit1.h" //窗口的头文件
class CMySocket : public CAsyncSocket
{
    public:
      void SetParent(TForm *pDlg);
      CMySocket(){AfxSocketInit();};
      virtual ~CMySocket(){};

    protected:
      virtual void OnClose(int nErrorCode);
      virtual void OnReceive(int nErrorCode);
      virtual void OnConnect(int nErrorCode);
      virtual void OnAccept(int nErrorCode);

    private:
      TForm1 *m_pDlg;
};

void CMySocket::SetParent(TForm *pDlg)       //设置传入窗口类的指针
{
    m_pDlg =(TForm1*)pDlg;
}

void CMySocket::OnAccept(int nErrorCode)     //事件处理函数
{
    if(nErrorCode==0)
    {
      ((TForm1*)m_pDlg)->OnAccept();         //调用窗口类中的OnAccept成员函数
    }
}

void CMySocket::OnConnect(int nErrorCode)    //事件处理函数
{
    if(nErrorCode==0)
    {
      ((TForm1*)m_pDlg)->OnConnect();        //调用窗口类中的OnConnect成员函数
    }
}

void CMySocket::OnReceive(int nErrorCode)    //事件处理函数
{
   ((TForm1*)m_pDlg)->OnReceive();           //调用窗口类中的OnReceive成员函数
}

void CMySocket::OnClose(int nErrorCode)      //事件处理函数
{
   ((TForm1*)m_pDlg)->OnClose();             //调用窗口类中的OnClose成员函数
}
#endif
作为服务器的窗口代码,如下:
#include "mySocket.h"
CMySocket  m_sConnectSocket;
CMySocket  m_sListenSocket;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{    
     m_sListenSocket.SetParent(this);
     m_sConnectSocket.SetParent(this);

     //创建服务器端,并开始监听
     bool re = m_sListenSocket.Create(8000);
     re = m_sListenSocket.Listen();
}

void TForm1::OnClose()
{

}
void TForm1::OnReceive()
{
   char* pBuf=new char[1025];
   int nBufSize=1024;
   int nReceived = m_sConnectSocket.Receive(pBuf,1024);
   if(nReceived!=SOCKET_ERROR)
   {
       pBuf[nReceived] = 0;
       ShowMessage(pBuf);
       delete []pBuf;
   }
   else
      ShowMessage("接收信息错误");
}
void TForm1::OnConnect()
{
    ShowMessage("客户端连接");
}
void TForm1::OnAccept()
{
    ShowMessage("接受客户端");
    m_sListenSocket.Accept(m_sConnectSocket);
}
客户端代码如下:
#include "mySocket.h"
CMySocket Client;
void __fastcall TForm1::Button7Click(TObject *Sender)
{
    bool re = Client.Create();
         re = Client.Connect("Localhost",8000);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button8Click(TObject *Sender)
{
    CString msg = "hello";
    int  nSent  = Client.Send(LPCTSTR(msg),msg.GetLength());     
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值