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

📄 udpsocket.cpp

📁 The application wizard has created this SoccerDoctor application for you. This application not onl
💻 CPP
字号:
#include "StdAfx.h"
#include "udpsocket.h"

CUDPSocket::CUDPSocket(void):_socket(INVALID_SOCKET)
{
}

CUDPSocket::~CUDPSocket(void)
{
	Delete();
}
bool CUDPSocket::Create(CString strHost,UINT nPort)
{
	WSADATA wsad;
	::WSAStartup(MAKEWORD(2,2),&wsad);
	/* 解析主机名字 */
	hostent* host_ent;
	if( ( host_ent = ::gethostbyname(strHost)) == NULL) {
		if( ::inet_addr(strHost) == INADDR_NONE ){
			_socket = INVALID_SOCKET;
			return false;
		} 
	}else {
		in_addr* addr_ptr = (in_addr *) *host_ent->h_addr_list ;
		strHost = inet_ntoa(*addr_ptr) ;
	}
	memset( &_ServerAddr, 0, sizeof( _ServerAddr ) ) ;
	_ServerAddr.sin_family		= AF_INET ;
	_ServerAddr.sin_addr.s_addr = inet_addr( strHost ) ;
	_ServerAddr.sin_port		= htons( nPort ) ;

	/* 建立socket并绑定端口 */
	if( (_socket = ::socket(AF_INET,SOCK_DGRAM,0) ) != INVALID_SOCKET ){
		sockaddr_in addr;
		memset(&addr,0,sizeof(addr));
		addr.sin_family = AF_INET;
		addr.sin_addr.s_addr = htonl(INADDR_ANY);
		addr.sin_port = htons(0);
		if( ::bind(_socket,(sockaddr *)&addr,sizeof(addr)) == 0 ){
			return true;
		}else {
			// int err = ::WSAGetLastError();
			::closesocket(_socket);
			_socket = INVALID_SOCKET;
		}
	}
	_socket = INVALID_SOCKET;
	return false;
}
bool CUDPSocket::Delete()
{
	if( Valid() ){
		::closesocket(_socket);		
		_socket = INVALID_SOCKET;
	}
	return true;
}
int CUDPSocket::SendTo(const char* buf,int len)
{
	if( Valid() ){
		return ::sendto(_socket,buf,len,0,(sockaddr*)&_ServerAddr,sizeof(_ServerAddr));
	}
	return 0;
}
bool CUDPSocket::Valid()
{
	return (_socket != INVALID_SOCKET);
}
int CUDPSocket::RecvFrom(char* buf,int len)
{
	if( Valid() ){
		sockaddr_in addr;
		int addrlen=sizeof(addr);
		int nrecved = ::recvfrom(_socket,buf,len,0,(sockaddr *)&addr,&addrlen);
		if( nrecved > 0 ){
			return nrecved; // 正常
		}
		if( ::WSAGetLastError() == WSAECONNRESET ){  
			Delete(); // 对方已经断开,这边也断了吧
		}
	}
	return 0;
}

⌨️ 快捷键说明

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