📄 usocket.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 + -