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

📄 mysocket.cpp

📁 本人初学window网络编程时开发的第一款网络游戏
💻 CPP
字号:
#include ".\mysocket.h"

CMySocket::CMySocket(void)
{

}

CMySocket::~CMySocket(void)
{
}

bool CMySocket::InitSocket()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD( 2, 2 );

	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) 
	{
		return false;
	}

	if ( LOBYTE( wsaData.wVersion ) != 2 ||
		HIBYTE( wsaData.wVersion ) != 2 ) 
	{
		WSACleanup( );
		return false; 
	}
    m_socket=socket(AF_INET , SOCK_DGRAM , 0);
    return true;
}
void CMySocket::SetSrvIP(char* chIP , USHORT port)
{
	
	m_addrSrv.sin_addr.S_un.S_addr=inet_addr(chIP);
	m_addrSrv.sin_family=AF_INET;
	m_addrSrv.sin_port=htons(port);
}
void CMySocket::SetSrvIP(USHORT _port)
{
	m_addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	m_addrSrv.sin_family=AF_INET;
	m_addrSrv.sin_port=htons(_port);
}
bool CMySocket::SetBind(int type)
{
	if (type==BIND_SRV)
	{
		bind(m_socket , (SOCKADDR*)&m_addrSrv , sizeof(SOCKADDR));
	} 
	else
	{
        bind(m_socket , (SOCKADDR*)&m_addrClient , sizeof(SOCKADDR));
	}
    return true;
}
void CMySocket::SendtoEX(const char * chSendBuf)
{
    sendto(m_socket , chSendBuf , strlen(chSendBuf) , 0 , (SOCKADDR *)&m_addrSrv , sizeof(SOCKADDR));
}
void CMySocket::SendtoEX(SOCKADDR_IN addr, const char * chSendBuf)
{
	sendto(m_socket , chSendBuf , strlen(chSendBuf) , 0 , (SOCKADDR *)&addr , sizeof(SOCKADDR));
}
void CMySocket::InitFdSocket()
{
    FD_ZERO(&m_fdSocket);  //清空套接字集合
    FD_SET(m_socket, &m_fdSocket); //向集中添加套接字
}

bool CMySocket::RecvfromEX(char* recvBuf , int recvSize , SOCKADDR_IN* pAddr)
{
    struct timeval tv; //等待时间
    tv.tv_sec = 0;   //秒
    tv.tv_usec = 0;  //毫秒

    fd_set fdRead = m_fdSocket;
    int nRet = select(0, &fdRead, NULL, NULL, &tv);  //筛选出接到数据的socket
    if (nRet > 0)
    {
		ZeroMemory(recvBuf , sizeof(recvBuf));
        int len=sizeof(SOCKADDR);
		int iRecv =recvfrom(m_fdSocket.fd_array[0], recvBuf, recvSize, 0 , (SOCKADDR*)pAddr , &len);
		if(iRecv > 0)       //可读
		{
            return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
        return false;
	}
}


⌨️ 快捷键说明

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