📄 socket.cpp
字号:
#include "sock_os.h"
// 下面两个函数LINUX支持,其他两个系统不支持
#if defined(WIN32) || defined(VXWORKS)
// 点分十进制-->网络地址的转换;
int inet_pton(int family,const char *strptr,void *addrptr)
{
if(family == AF_INET)
{
struct in_addr in_val;
in_val.s_addr = inet_addr(strptr);
if(in_val.s_addr != INADDR_NONE)
{
memcpy(addrptr,&in_val,sizeof(struct in_addr));
return 1;
}
return 0;
}
return -1;
}
// 网络地址-〉点分十进制
const char* inet_ntop(int family,const void *addrptr,char *strptr,size_t len)
{
const u_char *p = (const u_char*) addrptr;
if(family == AF_INET)
{
char temp[IP4_LEN];
snprintf(temp,sizeof(temp),"%d.%d.%d.%d",p[0],p[1],p[2],p[3]);
if(strlen(temp) >= len)
{
return NULL;
}
strcpy(strptr,temp);
return strptr;
}
return NULL;
}
#endif
// WIN32 网络编程前必须调用它;LINXU和VX不需要
int WIN32_SOCKET_WSASTARTUP(void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return SOCK_ERROR;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return SOCK_ERROR;
}
return SOCK_SUCCESS;
}
// 创建一个UDP套接口并绑定
int Udp_SocketSever_Create(void)
{
socket_int socket_fd;
SOCKADDR_IN servaddr;
socket_fd= socket(AF_INET, SOCK_DGRAM, 0);
if(socket_fd < 0)
{
return SOCK_ERROR;
}
ZeroMemory(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SEVER_PORT);
if (bind (socket_fd, (struct sockaddr *)&servaddr, sizeof (servaddr)))
{
SOCKET_CLOSE(socket_fd);
return SOCK_ERROR;
}
return socket_fd;
}
int Udp_SocketCli_Create(char *server_addr)
{
socket_int socket_fd;
SOCKADDR_IN serveradr;
memset(&serveradr,0,sizeof(serveradr));
serveradr.sin_family = AF_INET;
serveradr.sin_port = htons(SEVER_PORT);
// serveradr.sin_addr.s_addr = inet_addr(server_addr);
inet_pton(AF_INET,server_addr,&serveradr.sin_addr.s_addr);
socket_fd = socket(AF_INET,SOCK_DGRAM,0);
if(socket_fd < 0)
{
return SOCK_ERROR;
}
return socket_fd;
}
// TCP套接口的创建
int Tcp_SocketSever_Creat(void)
{
socket_int socket_fd;
SOCKADDR_IN servaddr;
socket_fd= socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd < 0)
{
return SOCK_ERROR;
}
ZeroMemory(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SEVER_PORT);
if (bind (socket_fd, (struct sockaddr *)&servaddr, sizeof (servaddr)))
{
SOCKET_CLOSE(socket_fd);
return SOCK_ERROR;
}
listen(socket_fd,SOCK_MAX_LISTEN_NUM);
return socket_fd;
}
int Tcp_SocketCli_Create(char *server_addr)
{
socket_int socket_fd;
SOCKADDR_IN serveraddr;
socket_fd= socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd < 0)
{
return SOCK_ERROR;
}
ZeroMemory(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
//serveraddr.sin_addr.s_addr = inet_addr(server_addr);
inet_pton(AF_INET,server_addr,&serveraddr.sin_addr.s_addr);
serveraddr.sin_port = htons(SEVER_PORT);
int r_conn = connect(AF_INET,(SOCKADDR*)&serveraddr,sizeof(serveraddr));
if(r_conn != 0)
{
printf("conncet error\n");
return SOCK_ERROR;
}
return socket_fd;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -