gpt4 book ai didi

c - 从套接字流中读取

转载 作者:行者123 更新时间:2023-11-30 20:35:10 25 4
gpt4 key购买 nike

我想使用套接字在 C 中创建一个简单的请求/响应应用程序。我想出了以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netdb.h>



int main ( int argc, char* argv[] ) {

struct addrinfo hints;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
hints.ai_flags = AI_PASSIVE;

int currentChar = 0;

struct addrinfo *addr;

int conn_s = socket ( AF_INET, SOCK_STREAM, 0 );

getaddrinfo( "google.com", "80", &hints, &addr );

connect( conn_s, addr->ai_addr, sizeof( struct sockaddr_in ) );

FILE* stream = fdopen( conn_s, "w+" );

if ( stream != NULL ) {

char *http_request = "GET / HTTP/1.1\r\n\r\n";

fprintf( stream, "%s", http_request );

do {

currentChar = fgetc( stream );
printf( "%c", currentChar );

} while ( currentChar != EOF );

fclose ( stream );
freeaddrinfo( addr );

}

return 0;

}

基本上,控制台显示流的结果(即 HTTP 请求的响应),但进程似乎永远不会终止。程序永远不会到达终点。

我猜currentChar永远不会持有值EOF,但我不知道为什么。

最佳答案

这是因为 HTTP/1.1 具有持久连接(又名 keepalive),您可以通过使用 HTTP/1.0 并添加 Connection: close header ,使服务器在每次请求后断开连接

关于c - 从套接字流中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com