#include <windows.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib")
/*
函数功能:开启套接字库
返回值:
******* -1 开启失败
******* 0 开启成功
*/
int
StartNetLib()
{
WSADATA wsadata = { 0 };
if(0 != WSAStartup(0x0202, &wsadata))
return -1;
return 0;
}
/*
函数功能:关闭套接字库
返回值:
******** -1 关闭失败
******** 0 关闭成功
*/
int
CloseNetLib()
{
if(0 != WSACleanup())
return -1;
return 0;
}
/*
函数功能:连接到某台计算机的某个端口。
参数说明:
********* szIpAddress 要连接的计算机的IP地址
********* usTcpPort 要在哪个端口上连接
********* sockConn 用于返回该连接套接字
返回值:
******* -1 *sockConn套接字创建失败
******* -2 连接函数connect执行失败
******* -3 参数sockServer 为空(NULL)。
******* 0 连接成功
*/
int
ConnectServer(char *szIpAddress, unsigned short usTcpPort, SOCKET* sockConn)
{
SOCKADDR_IN sockAddr = { 0 };
if( NULL == sockConn )
return - 3;
*sockConn = 0;
*sockConn = socket(AF_INET, SOCK_STREAM, 0);
if(INVALID_SOCKET == sockConn)
return -1;
sockAddr.sin_port = htons(usTcpPort);
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.S_un.S_addr = inet_addr(szIpAddress);
if(0 != connect(*sockConn, (SOCKADDR *)&sockAddr, sizeof sockAddr))
return -2;
return 0;
}
/*
函数功能:在本地计算机上的某个IP地址的某个端口上创建一个服务套接字。
参数说明:
********* szIpAddress 创建服务套接字的IP地址。如果指定为空(NULL)将在本地所有的IP地址上创建服务套接字。
********* usTcpPort 创建服务套接字的端口。
********* sockServer 用于接收返回的服务套接字。
返回值:
******** -1 服务套接字创建失败
******** -2 服务套接字绑定端口失败
******** -3 参数sockServer 为空(NULL)。
******** 0 创建服务套接字和绑定端口成功。
*/
int
CreateServer(char* szIpAddress, unsigned short usTcpPort, SOCKET* sockServer)
{
SOCKADDR_IN sockAddrServer = { 0 };
if( NULL == sockServer )
return -3;
*sockServer = 0;
*sockServer = socket(AF_INET, SOCK_STREAM, 0);
if(INVALID_SOCKET == sockServer)
return -1;
sockAddrServer.sin_family = AF_INET;
sockAddrServer.sin_port = htons(usTcpPort);
if(NULL == szIpAddress)
{
sockAddrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
}
else
sockAddrServer.sin_addr.S_un.S_addr = inet_addr(szIpAddress);
if(0 != bind( *sockServer , (SOCKADDR *)&sockAddrServer, sizeof sockAddrServer))
return -2;
return 0;
}
/*
函数功能:由域名获取IP地址
参数说明:
******** szHostName 域名 例如:www.baidu.com
******** szIP 保存IP地址的数组地址
******** iSizeIP szIP的尺寸
返回值:成功 0 失败 非0
*/
int GetIP(char*szHostName, char* szIP, int iSizeIP)
{
HOSTENT *host_entry = NULL;
unsigned char szTemp[4] = { 0 };
memset(szIP, 0, iSizeIP);
if( NULL == szHostName )
{
return -1;
}
if( NULL == szIP )
{
return -2;
}
if( iSizeIP<15 )
{
return -3;
}
host_entry=gethostbyname(szHostName);
itoa(host_entry->h_addr_list[0][0]&0x00ff, szTemp, 10);
strcat(szIP, szTemp);
strcat(szIP, ".");
itoa(host_entry->h_addr_list[0][1]&0x00ff, szTemp, 10);
strcat(szIP, szTemp);
strcat(szIP, ".");
itoa(host_entry->h_addr_list[0][2]&0x00ff, szTemp, 10);
strcat(szIP, szTemp);
strcat(szIP, ".");
itoa(host_entry->h_addr_list[0][3]&0x00ff, szTemp, 10);
strcat(szIP, szTemp);
strcat(szIP, "\0");
return 0;
}