⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectbase.h

📁 软件源代码,共享。有2个文件
💻 H
字号:
#pragma once
#include "..\VipShellInfo\vipshellcommand.h"
#include "..\VipShellInfo\IPSocket.h"

class CShellTcpConnect : public CTcpConnect
{
public:
	int Send(const void* buf, int len, int flags = 0, bool block = true)
	{
		return CTcpConnect::Send(buf, len, flags, block);
	}
	int Recv(void* buf, int len, int flags = 0, bool block = true)
	{
		return CTcpConnect::Recv(buf, len, flags, block);
	}
	bool Accept(CTcpServer* pTcpServer, bool block = true)
	{
		return CTcpConnect::Accept(pTcpServer, block);
	}
//	bool IsRecvTimeOut(DWORD dwTime = 1000);
	bool IsRecvTimeOut(DWORD dwTime = 6000)
	{
		DWORD dwS = GetTickCount();
		while(!_CanRead())
		{ 
			Sleep(1);
			if( GetTickCount() - dwS >= dwTime )
			{
				Close();
				return false;
			}
		}
		return true;
	}
	SOCKET Detach()
	{
		SOCKET s = m_sock;
		m_sock = INVALID_SOCKET;
		return s;
	}
	SOCKET Attach(SOCKET s)
	{
		SOCKET sRet = Detach();
		m_sock = s;
		return sRet;
	}
	SOCKET GetSocket()
	{
		return m_sock;
	}
};

class CConnectBase
{
public:
	CConnectBase(void);
	~CConnectBase(void);
protected:
	CShellTcpConnect m_hServer;
public:
	ULONG GetPeer(LPWSTR szIp)
	{		
		ULONG Ip;
		USHORT sPort;
		m_hServer.GetPeer(&Ip, (USHORT *)&sPort);
		struct in_addr sa;
		sa.S_un.S_addr = ntohl(Ip);
		lstrcpyW(szIp, CA2W(inet_ntoa(sa)));
		return sPort;
	}
	ULONG GetPeer(DWORD& dwIp)
	{
		ULONG Ip;
		USHORT sPort;
		m_hServer.GetPeer(&Ip, (USHORT *)&sPort);
		dwIp = Ip;
		return sPort;
	}
	SOCKET Detach()
	{
		return m_hServer.Detach();
	}
	SOCKET Attach(SOCKET s)
	{
		return m_hServer.Attach(s);
	}
	SOCKET GetSocket()
	{
		return m_hServer.GetSocket();
	}
	bool Close()
	{
		if(  !m_hServer.Close() )
			m_hServer.Detach();
		return true;
	}
protected:
	int _RecvBuffData(BYTE* pData, DWORD dwlen)
	{
		DWORD dwSendBuflen = 16 * 1024;
		DWORD dwSendLen = 0;
	//	DWORD dwSendTime = dwlen / dwSendBuflen;
		DWORD dwSended;
		DWORD dwRbuf = dwlen;
		while(dwSendLen < dwlen)
		{
			dwRbuf = (dwlen - dwSendLen);
			if( dwRbuf >=  dwSendBuflen)
			{
				dwSended = m_hServer.Recv(pData + dwSendLen, dwSendBuflen);
				if( dwSended == SOCKET_ERROR)
		    		return dwSended;
			}
			else
			{
				dwSended = m_hServer.Recv(pData + dwSendLen, dwRbuf);
				if( dwSended == SOCKET_ERROR)
		    		return dwSended;
			}
			dwSendLen += dwSended;
		}
		return dwlen;
	}
	int _SendBuffData(BYTE* pData, DWORD dwlen)
	{
		DWORD dwSendBuflen = 16 * 1024;
		DWORD dwSendLen = 0;
	//	DWORD dwSendTime = dwlen / dwSendBuflen;
		DWORD dwSended;
		DWORD dwRbuf = dwlen;
		while(dwSendLen < dwlen)
		{
			
			dwRbuf = (dwlen - dwSendLen);
			if( dwRbuf >=  dwSendBuflen)
			{
				dwSended = m_hServer.Send(pData + dwSendLen, dwSendBuflen);
				if( dwSended == SOCKET_ERROR)
		    		return dwSended;
			}
			else
			{
				dwSended = m_hServer.Send(pData + dwSendLen, dwRbuf);
				if( dwSended == SOCKET_ERROR)
		    		return dwSended;
			}
			dwSendLen += dwSended;
		}
		return dwlen;
	}
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -