gpt4 book ai didi

c - 套接字编程 C/C++ - recv 函数挂起?

转载 作者:太空狗 更新时间:2023-10-29 16:52:26 25 4
gpt4 key购买 nike

我的 recv 函数在从服务器获取响应时挂起。

c/c++ 客户端代码:

void sockStuff() {

int sock, bytes_recieved,bytes_send;
char send_data[1024], recv_data[4096];

struct hostent *host;
struct sockaddr_in server_addr;

host = gethostbyname("127.0.0.1");

if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("SocketError");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(50500);
server_addr.sin_addr = *((struct in_addr *) host->h_addr);
bzero(&(server_addr.sin_zero), 8);


if (connect(sock, (struct sockaddr *) &server_addr, sizeof(struct sockaddr))
== -1) {
perror("ConnectToError");
exit(1);
}


bytes_send = send(sock, a, strlen(a), 0);
bytes_send = shutdown(sock, 1);


bytes_recieved = recv(sock, recv_data, 4096, 0); //Where the program hangs??
recv_data[bytes_recieved] = '\0';
printf("\nRecieved data = %s ", recv_data);
cout << endl << endl;

shutdown(sock,2);



}

我的客户端是 C/C++,服务器端是 OpenEdge Progress。请查看代码并提出问题所在。??

最佳答案

您的代码将阻塞 recv 调用,直到服务器发回任何数据。由于没有发生这种情况,也许您应该问问自己,您的客户是否发送了完整的请求。在收到完整的请求之前,服务器可能不会开始发送响应。

如果您的客户端/服务器协议(protocol)是基于文本的,例如 HTTP 或 SMTP,您确定您的响应已正确终止吗?服务器可能期望 CR+LF ('\r\n') 而不是仅 LF ('\n') 或者它期望一个空行来终止请求:

char *request = "GET /index.html HTTP/1.1\r\nHost: www.example.com\r\n\r\n";

附言。您没有在代码片段中声明或初始化“a”。

关于c - 套接字编程 C/C++ - recv 函数挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1887668/

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