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

towaywu towaywu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用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;
}



...全文

相关推荐

评论 56
收藏 已收藏
分享
返回顶部
towaywu
C语言 70,039 成员 243,237 内容