📄 udpsocket.cpp
字号:
#include "UDPSocket.h"
#include <process.h>
CUDPSocket::CUDPSocket(int iPort)
:m_bRun(false)
,m_sock(INVALID_SOCKET)
{
m_sock = socket(AF_INET,SOCK_DGRAM,0);
if( INVALID_SOCKET == m_sock ) return;
sockaddr_in sa;
ZeroMemory(&sa,sizeof(sa));
sa.sin_addr.S_un.S_addr = 0;
sa.sin_port = iPort;
sa.sin_family = AF_INET;
if( 0 != bind(m_sock, (sockaddr*)&sa, sizeof(sockaddr_in))){
int err = WSAGetLastError();
return;
}
m_bRun = true;
for (unsigned long i = 0; i < m_iRecThreadNumber; i++)
{
_beginthread(ReceiveThread, 0, this);
}
}
CUDPSocket::~CUDPSocket(void){
closesocket(m_sock);
}
int CUDPSocket::Send(char* pBuffer, unsigned nBytesToSend, unsigned nDestAddr, unsigned nDestPort)
{
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_port = nDestPort;
sa.sin_addr.S_un.S_addr = nDestAddr;
return sendto(m_sock,pBuffer,nBytesToSend,0,(sockaddr *)&sa,sizeof(sockaddr_in));
}
void __cdecl CUDPSocket::ReceiveThread(void * lpParameter)
{
CUDPSocket *pthis = (CUDPSocket *)lpParameter;
char buf[2048];
int iBytes = 0;
sockaddr_in addr_in;
int fromlen = sizeof(sockaddr);
while(pthis->m_bRun)
{
iBytes = recvfrom(pthis->m_sock, buf, 2048, 0, (sockaddr*)&addr_in, &fromlen);
if( iBytes == SOCKET_ERROR || iBytes == 0){
Sleep(10);
continue;
}
pthis->OnReceive(buf, iBytes, addr_in.sin_addr.S_un.S_addr, addr_in.sin_port);
pthis->OnData(buf, iBytes, addr_in.sin_addr.S_un.S_addr, addr_in.sin_port);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -