18,356
社区成员
发帖
与我相关
我的任务
分享
WSADATA WSAData={0};
SOCKET sockfd;
struct sockaddr_in addr;
struct hostent *pURL;
pURL = gethostbyname("www.abc.com");
WSAStartup(MAKEWORD(2,2), &WSAData);
sockfd = socket(PF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);
addr.sin_port = htons(80);
connect(sockfd,(SOCKADDR *)&addr,sizeof(addr));
char *pHead =
"POST /abc.asp HTTP/1.1\r\n"
"User-Agent: kkc/89 (Windows NT 9.1; U; Edition IBIS; zh-cn) Presto/2.10.289 Version/12.01\r\n"
"Host: www.abc.com\r\n"
"Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n"
"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Connection: Keep-Alive\r\n"
"Content-Length: 15\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n\r\n"
"user=abc&pw=abc";
send:
int len = strlen(pHead);
do
{
ret = send(sockfd, pHead, strlen(pHead), 0);
if( ret == SOCKET_ERROR )
{
printf("*********************Send error *******************\n");
shutdown (sockfd , 0X02);
closesocket(sockfd);
break;
}
len -= ret;
}while(len > 0);
while ( recv(sockfd, text, 255, 0) > 0)
{
printf("%s", text);
memset(text, 0, 255);
}
char * UTF82Ansi(char *psz)
{
int iLen=strlen(psz)+1;
WCHAR * pbuf;
pbuf=new WCHAR[iLen];
if (MultiByteToWideChar( CP_UTF8, 0, psz, iLen,pbuf, (DWORD)iLen) == 0)
{
delete pbuf;
return NULL;
}
BOOL bValue = FALSE;
memset(psz,'\0',iLen);
//---CP_ACP
if(WideCharToMultiByte(936, 0, pbuf,-1,psz, iLen-1, "?", &bValue)==0)
{
delete pbuf;
return NULL;
}
delete pbuf;
return psz;
}
while ( recv(sockfd, text, 255, 0) > 0)
{
printf("%s", text);
memset(text, 0, 255);
}
这段代码要服务端关闭连接后才会返回(http一般是短连接,你应该用的是通用的http服务器,从这里可以看出,你所用的web服务器,在短连接上,保持5秒),所以也是有问题的,等5秒返回就不错了,如果是长连接,肯定就卡住了,永远不返回。