net_udp.cpp
来自「类似QQ,MSN表情的richedit,用来测试表情控件的」· C++ 代码 · 共 112 行
CPP
112 行
#include "stdafx.h"
#include "net_udp.h"
net_udp::net_udp()
{
;
}
net_udp::~net_udp()
{
netclose();
}
SOCKET net_udp::create()
{
if(client_socket != NULL)
return SOCKET_ERROR;
client_socket = socket(AF_INET, SOCK_DGRAM, 0);
if(client_socket == INVALID_SOCKET)
return SOCKET_ERROR;
int len = 32768*3;
bind_socket(9101);
/*
The Windows Sockets setsockopt function sets a socket option.设置套接字的选项。
int setsockopt (
SOCKET s,
int level,
int optname,
const char FAR * optval,
int optlen
);It is used to set or retrieve operating parameters associated with the socket, independent of the protocol and communications subsystem. Here are the supported commands to use in the cmd parameter and their semantics:
*/
int err = setsockopt(client_socket, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int));
if( err == SOCKET_ERROR )
return SOCKET_ERROR;
unsigned long ul = 1;
/*int ioctlsocket (
SOCKET s,
long cmd,
u_long FAR* argp
);
*/
int result = ioctlsocket(client_socket, FIONBIO, (unsigned long*)&ul);
if(result == SOCKET_ERROR)
return SOCKET_ERROR;
return client_socket;
}
//监听绑定端口
bool net_udp::bind_socket(USHORT bindport)
{
if(client_socket == NULL || bindport == 0)
return false;
SOCKADDR_IN m_clinetaddr;
m_clinetaddr.sin_family = AF_INET;
m_clinetaddr.sin_addr.s_addr = INADDR_ANY;
m_clinetaddr.sin_port = htons(bindport);
int result = bind(client_socket,(LPSOCKADDR)&m_clinetaddr,sizeof(m_clinetaddr));
if (result == SOCKET_ERROR)
return false;
return true;
}
int net_udp::senddata(char *pbuf, int length, ULONG ip, USHORT port)
{
int result = 0;
if(client_socket == NULL || pbuf == NULL)
return -1;
SOCKADDR_IN m_clinetaddr;
m_clinetaddr.sin_family = AF_INET;
m_clinetaddr.sin_addr.s_addr = ip;
m_clinetaddr.sin_port = htons(port);
/*int sendto (
SOCKET s,
const char FAR * buf,
int len,
int flags,
const struct sockaddr FAR * to,
int tolen
);
*/
result = sendto(client_socket, pbuf, length, 0, (sockaddr *)&m_clinetaddr, sizeof(m_clinetaddr));
return result;
}
bool net_udp::netclose()
{
if(client_socket != NULL)
closesocket(client_socket);
client_socket = NULL;
return true;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?