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

📄 wsocket.cpp

📁 模拟手机编程 支持短信群发
💻 CPP
字号:
// WSocket.cpp: implementation of the CWSocket class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Test.h"
#include "WSocket.h"
#include <math.h>

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CWSocket::CWSocket()
{

}

CWSocket::~CWSocket()
{

}

int CWSocket::Connect(char* IP_ADDR,int PORT)
{
	WSADATA Data;
	SOCKADDR_IN destSockAddr;
	unsigned long destAddr;
	int status;
	//initialize the Windows Socket DLL
	status=WSAStartup(MAKEWORD(1, 1), &Data);
	if (status != 0)
		AfxMessageBox("ERROR: WSAStartup unsuccessful.");
	destAddr=inet_addr(IP_ADDR);
	memcpy(&destSockAddr.sin_addr, &destAddr,sizeof(destAddr));
	destSockAddr.sin_port=htons(PORT);
	destSockAddr.sin_family=AF_INET;
	m_destSocket=socket(AF_INET, SOCK_STREAM, 0);
	if (m_destSocket == INVALID_SOCKET)
	{
		AfxMessageBox("ERROR: socket unsuccessful.");
		status=WSACleanup();
		if (status == SOCKET_ERROR)
			AfxMessageBox("ERROR: WSACleanup unsuccessful." );
		return(1);
	}
	status=connect(m_destSocket, (LPSOCKADDR) &destSockAddr, sizeof(destSockAddr));
	if (status == SOCKET_ERROR)
	{
		AfxMessageBox("ERROR: connect unsuccessful.");
		Close();
		return(1);
	}
	return 0;
}

// Send the message to the server
int CWSocket::Send(char* sendText,int bufLen)
{
	int nSecs=SECENDVAL;
	FD_SET fd = {1, m_destSocket};
	TIMEVAL tv = {nSecs, 0};
	if(select(0, NULL, &fd, NULL, &tv) == 0)
		return(1);
	m_cSocket.Lock();
	int numsnd,nLeft,nIdx;
	nLeft = bufLen;
	nIdx = 0;
	while (nLeft>0)
	{
		numsnd=send(m_destSocket, &sendText[nIdx], nLeft, NO_FLAGS_SET);
		if (numsnd == 0 || numsnd == SOCKET_ERROR)
		{
			Close();
			return(1);
		}
		else
		{
			nLeft -= numsnd;
			nIdx += numsnd;
		}
	}
	m_cSocket.Unlock();
	return numsnd;
}

// Wait for a response from server
int CWSocket::Receive(char* recvText,int bufLen)
{
	int nSecs=SECENDVAL;
	FD_SET fd = {1, m_destSocket};
	TIMEVAL tv = {nSecs, 0};
	if(select(0, &fd, NULL, NULL, &tv) == 0)
		return(1);
	m_cSocket.Lock();
	int numrcv,nLeft,nIdx;
	numrcv=recv(m_destSocket, recvText,bufLen, NO_FLAGS_SET);
	if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
	{
		Close();
		return 1;
	}
	if (numrcv<4)
	{
		m_cSocket.Unlock();
		return 1;
	}
	nLeft=0;
	nLeft = *(int*)recvText;
	nLeft -= numrcv;
	nIdx = numrcv;
	while (nLeft>0 && nLeft < MAXBUFLEN)
	{
		numrcv=recv(m_destSocket, &recvText[nIdx],nLeft, NO_FLAGS_SET);
		if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
		{
			Close();
			return 1;
		}
		nLeft -= numrcv;
		nIdx += numrcv;
	}
	m_cSocket.Unlock();
	return 0;
}

void CWSocket::Close()
{
	int status;
	status=closesocket(m_destSocket);
	//if (status == SOCKET_ERROR)
	//	AfxMessageBox("ERROR: closesocket unsuccessful.");
	status=WSACleanup();
	//if (status == SOCKET_ERROR)
	//	AfxMessageBox("ERROR: WSACleanup unsuccessful.");
		
//	m_cSocket.Unlock();
}

⌨️ 快捷键说明

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