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

📄 sock.cpp

📁 中国联通短信网络协议SGIP,可直接与联通短信网关相连
💻 CPP
字号:
// sock.cpp : implementation file
//

#include "stdafx.h"
#include "hgsmsend.h"
#include "hgsmsendDlg.h"
#include "sock.h"
#include "inihead.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// sock
extern CHgsmsendDlg *sgd;
SOCKADDR RsockAddr[3];
sock::sock()
{
		m_nLength=0;
	memset(m_szBuffer,0,sizeof(m_szBuffer));
}

sock::~sock()
{

	if (m_hSocket!=INVALID_SOCKET)
		Close();
}


// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(sock, CAsyncSocket)
	//{{AFX_MSG_MAP(sock)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif	// 0

/////////////////////////////////////////////////////////////////////////////
// sock member functions

void sock::OnAccept(int nErrorCode) 
{
	BOOL Result=0;
	int count=0;
	char buffer[1024];
  SOCKADDR Asock;
  int leng=sizeof(SOCKADDR);
  char temptime[20];
  memset(temptime,0,sizeof(temptime));
  memset(&Asock,0,sizeof(SOCKADDR));
  memset(buffer,0,sizeof(buffer));
   if (nErrorCode==0)
   {   
		if(!sgd->m_online)
		{
	     Result=Accept(sgd->Rsock,&Asock,&leng);
		}
		else
		{
			Clean();
		}
	   if(Result)
	   { 
		sprintf(sgd->Client.IP,"%d.%d.%d.%d",(BYTE)Asock.sa_data[2],(BYTE)Asock.sa_data[3],(BYTE)Asock.sa_data[4],(BYTE)Asock.sa_data[5]);
		sgd->MakeTime(temptime);
		sgd->Client.Time=atol(temptime);
        sprintf(buffer,"READ:客户登录: %s                   ",sgd->Client.IP);
        sgd->xprintf(buffer,"OK");
		sprintf(buffer,"READ:登录时间:  %Ld                    ",sgd->Client.Time);
		sgd->xprintf(buffer,"OK");
		sgd->m_online=1;
		AsyncSelect(FD_READ|FD_ACCEPT);
	  }
  }
}

void sock::OnReceive(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
		// TODO: Add your specialized code here and/or call the base clas
	
	if (nErrorCode==0)
	{
		m_nLength=ReceiveFrom((void *)m_szBuffer,sizeof(m_szBuffer),(CString &)m_ip,(UINT &)m_port);
		if(m_nLength<=0||m_nLength>=2048)
			{
			   sgd->xprintf(" 接收错误!!!!!","ERROR!");
			   return;
			}
		
		m_szBuffer[m_nLength]=0;
		if(m_port==UDP_PORT_USER)
		{
			sgd->UdpPortUserRead(m_szBuffer,m_nLength,m_ip);
		}
		else if (m_port==UDP_PORT_SEND)
		{
			return;
		}
		else if (m_port==UDP_PORT_READ)
		{
			
		 sgd->UdpRead(m_szBuffer,m_nLength,m_ip);
		}
		else
		{
			if(this==&sgd->Rsock)
			{
              sgd->ServerRead(m_szBuffer,m_nLength);  
			}
			else
			{
			 sgd->TcpRead(m_szBuffer,m_nLength);
			}
		}
	}

}

void sock::OnSend(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
		char buffer[40];
	memset(buffer,0,sizeof(buffer));
 
	SendTo((const void *)m_szBuffer,m_nLength,nHostPort,HostAddress);
	m_nLength=0;
	memset(m_szBuffer,0,sizeof(m_szBuffer));
	AsyncSelect(FD_READ|FD_ACCEPT);
}

void sock::OnConnect(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
	
		char buffer[1024];
	if (nErrorCode==0)
	{
		wsprintf(buffer,"CONNECTED TO SERVER %s  ",SERVER_ADR);
		sgd->xprintf(buffer,"连接成功");
		sgd->m_connect=1;
		sgd->Bind_Transmitter();
	
	}
	else
	{
		wsprintf(buffer,"Connect To Server Error");
		sgd->xprintf(buffer,"ERROR!");
	}
	
}

void sock::SocketSend(char *buf, int len, UINT port, CString ip)
{
	nHostPort=port;
	HostAddress=ip;
	memset(m_szBuffer,0,sizeof(m_szBuffer));
	memcpy(m_szBuffer,buf,len);
	m_nLength=len;
	AsyncSelect(FD_WRITE);

}

void sock::Clean()
{

	sgd->Rsock.ShutDown();
	memset(&sgd->Client,0,sizeof(CLIENT));
	sgd->m_online=0;
    sgd->Rsock.Close();
	//AsyncSelect(FD_READ|FD_WRITE|FD_ACCEPT);
	AsyncSelect(FD_READ|FD_ACCEPT);
}

⌨️ 快捷键说明

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