⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket.cpp

📁 这个sokcet库
💻 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 + -