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

📄 net.cpp

📁 基于sip协议得系统分析
💻 CPP
字号:
#include "net.h"

/*initilize socket lib and create a socket*/
SOCKET net_SocketInit()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	SOCKET localsocket;
	int err; 
	wVersionRequested = MAKEWORD( 2, 2 ); 
	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 )
	{
		printf("ould not find a usable WinSock DLL.\n");                                
		return -1;
	}
	
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater    */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we      */
/* requested.                                       */

	if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 )
	{
   		printf(" DLL can't supports versions 2.2\n");
		WSACleanup( );
		return -1; 
	}
	if (  (localsocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
	{
		printf("Create socket failed!\n");
		return -1;
	}
	return localsocket;
}

/*connect to server*/ 
bool  net_ConnectServer(SOCKET socket,sockaddr_in addr)
{
		if(SOCKET_ERROR==connect( socket,(struct sockaddr * )&addr,sizeof(sockaddr)))
		{
			net_CloseSocket(socket);
			printf("Connet to server failed!\n");
			return false;
		}
		return true;
}

/*receiv the server's response ; 200 and OK means upload success*/ 
bool net_RecvResponse(SOCKET socket)
{
	char recvbuf[1024];
	int recvlen;
	if( (recvlen=recv(socket,recvbuf,1024,0))==-1)
	{
		printf("recv error!\n");
		net_CloseSocket(socket);
		return false;
	}
	else
	{
		if(recvlen>0)
			recvbuf[recvlen]='\0';
		else
			recvbuf[0]='\0';
		if(recvlen>0)
		{
			printf("Response result:%s",recvbuf);
			if( !(strstr(recvbuf,"200")&&strstr(recvbuf,"OK")))
			{
				net_CloseSocket(socket);
				return false;
			}
		}
		return true;		
	}
}


/*use http protocal to  upload message*/ 
bool  net_UploadMessage(SOCKET socket,char *msg,char *ip,int port)
{   
		char sendbuf[1024];
		int allsendlen=0,sendlen=0,alldatabytes=0;		
		sprintf(sendbuf, "GET /default.asp?listid=%s HTTP/1.0\r\n\
		Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms\r\n\
		Accept-Language: zh-cn\r\n\
		Accept-Encoding: gzip, deflate\r\n\
		User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)\r\n\
		Host: %s:%d\r\n\
		Connection: Keep-Alive\r\n\
		\r\n", msg, ip, port);
	     alldatabytes=strlen(sendbuf);
		while(allsendlen<alldatabytes)
		{
			sendlen=send( socket, sendbuf+allsendlen, alldatabytes-allsendlen, 0);		
			if(allsendlen==-1) 
			{

				printf("upload message error!\n" );
				net_CloseSocket(socket);
				return (false);
			}
			allsendlen+=sendlen;
			printf("send data: %d",allsendlen);
		}
		return true;	
}

/*initilize server's sockaddr_in struct*/
void net_AddrSrvInit(sockaddr_in addr,char *ip,int port)
{		/* zero the struct*/
		memset(&addr, 0, sizeof(addr)); 				
		addr.sin_family=AF_INET; 
		addr.sin_port=htons(port); 
		addr.sin_addr.s_addr=inet_addr(ip);
}

/*config the server's sockaddr_in */
sockaddr_in net_Config(char *ip,int port)
{		
		sockaddr_in srvaddr;	
		memset(&srvaddr, 0, sizeof(srvaddr)); // zero the struct /				
		srvaddr.sin_family=AF_INET; 
		srvaddr.sin_port=htons(port); 
		srvaddr.sin_addr.s_addr=inet_addr(ip);
		printf("server ip:%s\t server port:%d\n",ip,port);
		return srvaddr;
}

void net_CloseSocket(SOCKET socket)
{
    closesocket(socket);
    WSACleanup();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -