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

📄 agentsock.cpp

📁 机器人足球仿真11vs11源代码(精简版)
💻 CPP
字号:
#include "OS.h"
#include "stdafx.h"
#include "Agentsock.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNAMIC(CAgentSocket, CAsyncSocket)

CAgentSocket::CAgentSocket()
{
	m_uiPort = 0;
	m_sSocketAddress = _T("");
}


void CAgentSocket::OnReceive(int nErrorCode)
{
	CAsyncSocket::OnReceive(nErrorCode);
}


BOOL CAgentSocket::Create(UINT nSocketPort, LPCTSTR lpszSocketAddress)
{
	int	nSocketType = SOCK_DGRAM;
	long	lEvent = FD_READ | FD_WRITE | FD_ACCEPT | FD_CONNECT | FD_CLOSE;

	// create the socket
	if (Socket(nSocketType, lEvent))
	{
		// try to bind the socket to any address
		if (Bind(nSocketPort, lpszSocketAddress))
			return TRUE;
		
		// an error occured
		int nResult = GetLastError();
		Close();
		WSASetLastError(nResult);
	}
	return FALSE;
}


BOOL CAgentSocket::Bind(UINT nSocketPort, LPCTSTR lpszSocketAddress)
{
	int	result;

	// bind to INADDR_ANY
	memset(&sockAddr, 0, sizeof(sockAddr));
	sockAddr.sin_family = AF_INET;
	sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
	sockAddr.sin_port = htons(0);
	result = CAsyncSocket::Bind((SOCKADDR*)&sockAddr, sizeof(sockAddr));

	// set the proper values of port and address for the following SendTo commands
	memset(&sockAddr, 0, sizeof(sockAddr));
	LPSTR lpszAscii = (LPTSTR)lpszSocketAddress;
   sockAddr.sin_family			= AF_INET ;
   sockAddr.sin_addr.s_addr	= inet_addr(lpszAscii) ;
	if (sockAddr.sin_addr.s_addr == INADDR_NONE)
	{
		// get the address from a nameserver
		LPHOSTENT lphost;
		lphost = gethostbyname(lpszAscii);
		if (lphost != NULL)
			sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
		else
		{
			WSASetLastError(WSAEINVAL);
			return FALSE;
		}
	}
	sockAddr.sin_port	= htons((u_short)nSocketPort) ;
	
	// return the result of the Bind command
	return result;
}


int CAgentSocket::ReceiveFrom(void* lpBuf, int nBufLen, CString& rSocketAddress
										, UINT& rSocketPort, int nFlags)
{
	// try to receive data
	memset(&sockAddr, 0, sizeof(sockAddr));
	int nSockAddrLen = sizeof(sockAddr);
	int nResult = CAsyncSocket::ReceiveFrom(lpBuf, nBufLen, (SOCKADDR*)&sockAddr
														 , &nSockAddrLen, nFlags);
	if(nResult != SOCKET_ERROR)
	{
		// succesfull
		rSocketPort = ntohs(sockAddr.sin_port);
		rSocketAddress = inet_ntoa(sockAddr.sin_addr);
	}

	return nResult;
}


int CAgentSocket::SendTo(const void* lpBuf, int nBufLen, UINT nHostPort
								 , LPCTSTR lpszHostAddress, int nFlags)
{
	// send the buffer
	return CAsyncSocket::SendTo(lpBuf, nBufLen, (SOCKADDR*)&sockAddr, sizeof(sockAddr), nFlags);
}

⌨️ 快捷键说明

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