📄 udpclient.cpp
字号:
#include "UdpClient.h"
CUdpClient::CUdpClient(unsigned long tgt, short pt)
{
this->addr.sin_family = AF_INET;
this->addr.sin_addr.s_addr = tgt;
this->addr.sin_port = pt;
}
CUdpClient::CUdpClient(void)
{
this->addr.sin_family = AF_INET;
this->addr.sin_addr.s_addr = 0;
this->addr.sin_port = 0;
}
CUdpClient::~CUdpClient(void)
{
closesocket(sock);
WSACleanup();
}
int CUdpClient::Init(void)
{
int ret = 0;
WinVersion = MAKEWORD(2, 2);
if (WSAStartup(WinVersion, &wsa) < 0)
{
return -1;
}
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == INVALID_SOCKET)
{
return -1;
}
return ret;
}
int CUdpClient::SetDestination(struct sockaddr_in &dest)
{
memmove(&(this->addr), &dest, sizeof(struct sockaddr_in));
return 0;
}
__int32_t CUdpClient::ReadFrom(void *buf, __u_int len, struct sockaddr_in &srv)
{
__int32_t ret = 0;
int length = sizeof(srv);
ret = recvfrom(this->sock, (char *)(buf), len, 0, (struct sockaddr *)(&srv), &length);
if (ret == SOCKET_ERROR)
{
return -1;
}
return ret;
}
__int32_t CUdpClient::WriteTo(void *buf, __u_int len, struct sockaddr_in &dest)
{
__int32_t ret = 0;
int length = sizeof(dest);
ret = sendto(this->sock, (char *)(buf), len, 0, (struct sockaddr *)(&dest), length);
if (ret == SOCKET_ERROR)
{
return -1;
}
return ret;
}
__int32_t CUdpClient::Read(void *buf, __u_int len)
{
__int32_t ret = 0;
struct sockaddr_in tmp;
int length = sizeof(struct sockaddr_in);
ret = recvfrom(this->sock, (char *)(buf), len, 0, (sockaddr *)(&tmp), &length);
if (ret == SOCKET_ERROR)
{
return -1;
}
return ret;
}
__int32_t CUdpClient::Write(void *buf, __u_int len)
{
__int32_t ret = 0;
int length = sizeof(struct sockaddr_in);
ret = sendto(this->sock, (char *)(buf), len, 0, (struct sockaddr *)(&(this->addr)), length);
if (ret == SOCKET_ERROR)
{
return -1;
}
return ret;
}
__int32_t CUdpClient::ReadFromWithinTime(void *buf, __u_int len, struct sockaddr_in &srv, int sec)
{
__int32_t ret = 0;
int length = sizeof(struct sockaddr_in);
fd_set read_set;
struct timeval tv;
memset(&tv, 0, sizeof(tv));
tv.tv_sec = sec;
tv.tv_usec = 0;
FD_ZERO(&read_set);
FD_SET(sock, &read_set);
ret = select(0, &read_set, NULL, NULL, &tv);
if (ret == SOCKET_ERROR)
{
return -1;
}
if (ret == 0)
{
return 0;
}
ret = recvfrom(this->sock, (char *)(buf), len, 0, (sockaddr *)(&(srv)), &length);
if (ret == SOCKET_ERROR)
{
return -1;
}
return ret;
}
__int32_t CUdpClient::ReadWithinTime(void *buf, __u_int len, int sec)
{
__int32_t ret = 0;
fd_set read_set;
struct timeval tv;
memset(&tv, 0, sizeof(tv));
tv.tv_sec = sec;
tv.tv_usec = 0;
FD_ZERO(&read_set);
FD_SET(sock, &read_set);
ret = select(0, &read_set, NULL, NULL, &tv);
if (ret == SOCKET_ERROR)
{
return -1;
}
if (ret == 0)
{
return 0;
}
struct sockaddr_in tmp;
int length = sizeof(tmp);
ret = recvfrom(this->sock, (char *)(buf), len, 0, (sockaddr *)(&tmp), &length);
if (ret == SOCKET_ERROR)
{
return -1;
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -