用C模拟了一个http请求,但是recv函数接收的数据不完整且不安顺序获取信息
用C模拟了一个http请求,但是recv函数接收的数据不完整且不安顺序获取信息
我把代码贴上


我把代码贴上
#include <stdio.h>
#include "winsock2.h"
//#pragma comment(lib, "ws2_32.lib") //2.0版本
int main() {
// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR ){
printf("Error at WSAStartup()\n");
}
// Create a socket.
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return 1;
}
// Connect to a server.
struct sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("113.106.90.157");
clientService.sin_port = htons( 80 );
if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(SOCKADDR)) == SOCKET_ERROR){
printf( "Failed to connect.\n" );
WSACleanup();
return;
}
// Send and receive data.
int bytesSent;
char sendbuf[1024];
sprintf(sendbuf,"%s","GET / HTTP/1.1\r\n");
strcat(sendbuf,"Host: www.chachaoo.com\r\n");
strcat(sendbuf,"Content-Encoding: utf-8\r\n");
strcat(sendbuf,"User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0\r\n\r\n");
int bytesRecv = strlen(sendbuf);
char recvbuf[1024];
char *precvbuf = recvbuf;
bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );
// bytesRecv = recv( m_socket, recvbuf, 2 , 0 );
// printf("\n %d\n",bytesRecv);
while( 1 ) {
bytesRecv = recv(m_socket, recvbuf,1024 , 0);
printf("%s",recvbuf);
// printf("\n%d\n",bytesRecv);
if(bytesRecv<=0){
break;
}
}
close(m_socket);
return 0;
} 

...全文
相关推荐
基于C语言Http请求上传文件到服务器与下载文件的源代码
C语言编写,http请求,上传文件到指定服务器,下载服务器文件,指网络图片地址,下载网络图片实例,里面含有软件和操作说明,不明白可以私信我,看到我会回复的。
如何利用C语言实现最简单的HTTP服务器详解
主要给大家介绍了关于如何利用C语言实现最简单的HTTP服务器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
linux下纯C简单的HTTP POST请求 客户端模型=.docx
linux下纯C简单的HTTP POST请求 客户端模型=.docx
C HTTP下载资源demo
该demo主要是c语音HTTP下载资源的例程,有需要的可以下载看看
基于C语言实现http请求(源码+示例)
此代码演示了如何使用C语言创建一个简单的HTTP请求,并接收服务器的响应。 首先,使用 socket() 函数创建套接字,然后使用 connect() 函数连接到服务器。 然后,使用 send() 函数发送HTTP请求到服务器。 最后,使用 recv() 函数接收服务器的响应,并将其打印出来。 在接收响应时,我们使用循环来接收所有数据,直到 recv() 返回0,表示服务器关闭了连接。 最后,使用 close() 函数关闭套接字,释放资源。


