基于CAsyncSocket类的TCP通信实例讲解

基于CAsyncSocket类的TCP通信实例讲解_第1张图片

服务器端

1.监听程序

//注意虚函数OnAccept()引入
//看到虚函数我想大家都能想到多态。顾名思义多态就是子类对父类方法的重写,以虚函数的方式重写。
基于CAsyncSocket类的TCP通信实例讲解_第2张图片
基于CAsyncSocket类的TCP通信实例讲解_第3张图片

class CNewSOCK;
class CListen : public CAsyncSocket
{
   
public:
	CListen();
	virtual ~CListen();
	virtual void OnAccept(int nErrorCode);
private: 
	CNewSOCK* m_sock;
};

//OnAccept()虚函数中注意Accept()函数的使用,参数p_sock,是服务器端掌管数据收发类的指针。
//虚函数的用意:当监听到客户端的连接,即通过收发消息类接受客户端的消息。数据收发类下面会提到。
//AsyncSelect(FD_READ);会触发OnReceive()函数

void CListen::OnAccept(int nErrorCode)
{
   
	// TODO:  在此添加专用代码和/或调用基类
	CNewSOCK *p_sock = new CNewSOCK();

	if (Accept(*p_sock))
	{
   
		p_sock->AsyncSelect(FD_READ); //触发通信socket的Read函数读数据  
		m_sock = p_sock;
	}
	else
	{
   
		delete p_sock;
	}
	CAsyncSocket::OnAccept(nErrorCode);
}

//数据收发类

class Cht_SeverDlg;
class CNewSOCK : public CAsyncSocket
{
   
public:
	CNewSOCK();
	virtual ~CNewSOCK();
	virtual void OnReceive(int nErrorCode);
	virtual void OnSend(int nErrorCode);
	void SEtDlg(Cht_SeverDlg* m_param);
	
	UINT m_nLength;
	TCHAR m_szBuffer[4096];
	CEdit m_edit2;

	Cht_SeverDlg* m_dlg;
	
};

//注意到两个虚函数OnSend(),OnReceive()
//void SEtDlg(Cht_SeverDlg* m_param);形参为主类的指针,意在数据收发类中可以使用主类的函数OnRev()。调用的主类函数,多为收发数据在控件中的显示。
//AsyncSelect(FD_READ);调用OnReceiv()
//AsyncSelect(FD_WRITE);调用OnSend()


#include "stdafx.h"
#include "ht_Sever.h"
#include "NewSOCK.h"
#include "ht_SeverDlg.h"


// CNewSOCK

CNewSOCK::CNewSOCK() :m_nLength(0)
{
   
	memset(m_szBuffer, 0, sizeof(m_szBuffer));//初始化
}

CNewSOCK::~CNewSOCK()
{
   
	if (m_hSocket != INVALID_SOCKET)
	{
   
		Close()

你可能感兴趣的:(c++)