#include "stdafx.h"
#include "XSocketCtrl.h"
#include <Ws2tcpip.h>
CXSocketCtrl::CXSocketCtrl()
{
m_pMsgBuf = new char[CXAsyncSocket::MAX_BUF];
}
CXSocketCtrl::~CXSocketCtrl()
{
if (NULL == m_pMsgBuf)
{
delete[] m_pMsgBuf;
m_pMsgBuf = NULL;
}
}
/*
*函数功能:设置消息接收窗口以及消息ID
*/
void CXSocketCtrl::SetSock(CWnd *pWnd, UINT uMsgID)
{
m_pWnd = pWnd;
m_nMsgID = uMsgID;
}
/*
*函数功能:创建套接字
*返回值:TRUE:创建成功,FALSE:失败
*
*/
BOOL CXSocketCtrl::CreateSocket(UINT nSocketPort)
{
//初始化套接字
if (!AfxSocketInit())
{
return FALSE;
}
//获取本机IP地址
CString strIP = GetLocalIP();
//
if (!strIP.Compare(_T("")))
{
return FALSE;
}
//创建套接字
BOOL res = m_Socket.Create(nSocketPort, SOCK_DGRAM, FD_READ | FD_WRITE | FD_OOB | FD_CLOSE, strIP);
if (!res)
{
return FALSE;
}
//设置套接字管理指针
m_Socket.SetSocketCtrl(this);
return TRUE;
}
/*
*函数功能:发送长度为len的缓冲区数据
*返回值:发送成功,返回TRUE,否则返回FALSE
*/
BOOL CXSocketCtrl::Send(const void *pBuf, int len, UINT nPort, CString strIPaddress)
{
int nSend = m_Socket.SendTo(pBuf, len, nPort, strIPaddress, 0);
if (nSend < 0)
{
return FALSE;
}
return TRUE;
}
/*
*函数功能:发送长度为len的缓冲区数据
*返回值:发送成功,返回TRUE,否则返回FALSE
*/
BOOL CXSocketCtrl::Send(const void* lpBuf, int nBufLen, const SOCKADDR* lpSockAddr, int nSockAddrLen)
{
int nSend = m_Socket.SendTo(lpBuf, nBufLen, lpSockAddr, nSockAddrLen);
if (nSend)
{
return FALSE;
}
return TRUE;
}
CString CXSocketCtrl::GetLocalIP()
{
char local[255] = { 0 };
(void)gethostname(local, sizeof(local));
CString strHostName(local);
CString strIPAddress(_T(""));
PADDRINFOW addr;
ADDRINFOW hints;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
int nres = GetAddrInfo(strHostName, NULL, &hints, (PADDRINFOW*)&addr);
if (nres == 0)
{
strIPAddress.Format(_T("%u.%u.%u.%u"), (unsigned char)addr->ai_addr->sa_data[2], (unsigned char)addr->ai_addr->sa_data[3], (unsigned char)addr->ai_addr->sa_data[4], (unsigned char)addr->ai_addr->sa_data[5]);
}
return strIPAddress;
}
/*
*函数功能:处理接收消息
*/
void CXSocketCtrl::Receive(char *pBuff, int len, CSockInfo &info)
{
if (NULL != m_pWnd->GetSafeHwnd())
{
memset(m_pMsgBuf, 0, CXAsyncSocket::MAX_BUF);
memcpy(m_pMsgBuf, pBuff, len);
CSockInfo sockInfo = info;
m_pWnd->SendMessage(m_nMsgID, (WPARAM)m_pMsgBuf, (LPARAM)&sockInfo);
}
}
UDP网络套接字类.rar_UDP_UDP 封装_UDP封装类_udp类_网络UDP
版权申诉
160 浏览量
2022-09-19
22:57:44
上传
评论
收藏 4KB RAR 举报
四散
- 粉丝: 49
- 资源: 1万+
最新资源
- sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板).zip
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
- 123321123323211
- yolov8实战第八天-pyqt5-yolov8实现车牌识别系统(论文(8700+字+数据集+完整部署代码+代码使用说明)
- 三相桥式全桥整流电路MATALB Simulink仿真文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈