WIN32_LEAN_AND_MEAN 宏必须定义,否则会出现很多包含系统文件的错误。
size_t process_http(int sockfd, char *host, char *page, char *poststr)
{
char sendline[MAXLINE + 1], recvline[MAXLINE + 1];
size_t n;
//sprintf(sendline,
// "POST %s HTTP/1.1\r\n"
// "Host: %s\r\n"
// "Content-type: application/json\r\n"
// "Content-length: %d\r\n\r\n"
// "%s", page, host, strlen(poststr), poststr);
sprintf(sendline,
"POST %s HTTP/1.1\r\n"
"Progma: no-cache\r\n"
"Cach-control: no-cache\r\n"
"Host: %s\r\n"
"Origin: http://192.168.1.201\r\n"
"Content-type: application/json\r\n"
"Content-length: %d\r\n\r\n"
"%s", page, host, strlen(poststr), poststr);
printf(sendline);
send(sockfd, sendline, strlen(sendline),0);
while ((n = recv(sockfd, recvline, MAXLINE, 0)) > 0) {
recvline[n] = '\0';
printf("\n%s", recvline);
}
return n;
}
封装http 请求头,发送、接收数据。
int main(void)
{
WSADATA wsaData;
SOCKET sockfd = INVALID_SOCKET;
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
int err;
//********** You can change. Puy any values here *******
/*char *hname = "souptonuts.sourceforge.net";
char *page = "/chirico/test.php";
char *poststr = "mode=login&user=test&password=test\r\n";*/
err = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (err != 0) {
printf("WSAStartup failed with error: %d\n", err);
return 1;
}
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
// Resolve the server address and port
err = getaddrinfo(hname, "80", &hints, &result);
if (err != 0) {
printf("getaddrinfo failed with error: %d\n", err);
WSACleanup();
return 1;
}
// Attempt to connect to an address until one succeeds
for (ptr = result; ptr != NULL; ptr = ptr->ai_next) {
// Create a SOCKET for connecting to server
sockfd = socket(ptr->ai_family, ptr->ai_socktype,
ptr->ai_protocol);
if (sockfd == INVALID_SOCKET) {
printf("socket failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Connect to server.
err = connect(sockfd, ptr->ai_addr, (int)ptr->ai_addrlen);
if (err == SOCKET_ERROR) {
closesocket(sockfd);
sockfd = INVALID_SOCKET;
continue;
}
break;
}
if (err < 0)
{
goto END;
}
process_http(sockfd, hname, page, poststr);
END:
closesocket(sockfd);
WSACleanup();
getchar();
exit(0);
}