📄 net.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 + -