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

📄 usocket.cpp

📁 聊天室的源代码程序
💻 CPP
字号:
// USocket.cpp : implementation file
//

#include "stdafx.h"
#include "UServer.h"
#include "Transmission.h"
#include "USocket.h"
#include "UServerDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//UDP Receive Thread process


/////////////////////////////////////////////////////////////////////////////
// CUSocket

CUSocket::CUSocket()
{

}

CUSocket::CUSocket(CTransmission * pTrans)
{
	m_pTrans=pTrans;

}
CUSocket::~CUSocket()
{
}


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

void CUSocket::OnReceive(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(m_pTrans)
	{
		m_pTrans->ProcessReceiveMsg();
	}
	CSocket::OnReceive(nErrorCode);
}

int CUSocket::Broadcast(const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress, int nFlags )
{
	BOOL bMultipleApps = TRUE;		
	SetSockOpt(SO_REUSEADDR, (void*)&bMultipleApps, sizeof(BOOL), SOL_SOCKET);

	int b=1;
	SetSockOpt(SO_BROADCAST,&b,sizeof(BOOL),SOL_SOCKET); 
//	SetSockOpt(SO_DONTROUTE,&b,sizeof(BOOL),SOL_SOCKET); 
	int isend=SendTo(lpBuf,nBufLen,nHostPort,NULL,nFlags);
	return isend;
}

int CUSocket::PtoP(const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress, int nFlags )
{
	return 	SendTo(lpBuf,nBufLen,nHostPort,lpszHostAddress,nFlags);

}

int CUSocket::Multicast(const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress, int nFlags )
{
	BOOL bMultipleApps = TRUE;		
	SetSockOpt(SO_REUSEADDR, (void*)&bMultipleApps, sizeof(BOOL), SOL_SOCKET);
	int ttl=8;
	SetSockOpt(IP_MULTICAST_TTL,&ttl,sizeof(int),IPPROTO_IP); //选择组播数据报 
	
	int isend=SendTo(lpBuf,nBufLen,nHostPort,lpszHostAddress);
	return isend;
}

BOOL CUSocket::JoinGroup(LPCTSTR lpszHostAddress)
{
	BOOL bMultipleApps = TRUE;		// allow reuse of local port if needed 
	SetSockOpt(SO_REUSEADDR, (void*)&bMultipleApps, sizeof(BOOL), SOL_SOCKET);
	ip_mreq mreq;
	mreq.imr_multiaddr.s_addr = inet_addr(lpszHostAddress);	// group addr 
	mreq.imr_interface.s_addr = htons(INADDR_ANY);		// use default  
	if(SetSockOpt(IP_ADD_MEMBERSHIP,(char FAR *)&mreq,sizeof(mreq),IPPROTO_IP))
	{
		return true;
	}
	else
	{
		return false;
	}	
}

BOOL CUSocket::DropGroup(LPCTSTR lpszHostAddress)
{
	BOOL bMultipleApps = TRUE;		/* allow reuse of local port if needed */
	SetSockOpt(SO_REUSEADDR, (void*)&bMultipleApps, sizeof(BOOL), SOL_SOCKET);
	ip_mreq mreq;
	mreq.imr_multiaddr.s_addr = inet_addr(lpszHostAddress);	/* group addr */ 
	mreq.imr_interface.s_addr = htons(INADDR_ANY);		/* use default */ 
	if(SetSockOpt(IP_DROP_MEMBERSHIP,(char FAR *)&mreq,sizeof(mreq),IPPROTO_IP))
		return true;
	else
		return false;
}

⌨️ 快捷键说明

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