gpt4 book ai didi

c - WinSock 的 send() 总是返回 0 字节发送

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:34 24 4
gpt4 key购买 nike

我一直在使用 Winsock2 的函数 send() 遇到问题。无论我提供什么数据,send() 函数总是返回 0;例如发送了 0 个字节,并且没有错误。我已经谷歌搜索了一段时间,但还没有找到解决方案。我已经检查过发送的数据格式是否正确,并且我正在向它传递一个有效的套接字。

这是错误所在的代码片段(我认为至少):

    //Send HTTP header to server
#define MAX_HEADER_LEN 512

#ifdef UNICODE

char* cpHost = (char*)malloc(sizeof(char) * (_tcslen(cpServer)+1));
wcstombs(cpHost, cpServer, _tcslen(cpServer));
cpHost[_tcslen(cpServer)] = '\0';

#else
char* cpHost = cpServer;
#endif

char cpHeader[MAX_HEADER_LEN];
sprintf(cpHeader, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", "/", cpHost);

#ifdef UNICODE
free(cpHost);
#endif

//Send the HTTP request to the sever
int iSent;
if(iSent = send(servSocket, cpHeader, strlen(cpHeader), 0) == SOCKET_ERROR)
{
_tprintf(TEXT("Error sending header to server: %d\n"), WSAGetLastError());
WSACleanup();
return 2;
}

_tprintf(TEXT("Sent '%d' bytes\n"), iSent);

return 0;

知道是什么导致了这种行为吗?

这是文件的完整源代码(请原谅所有不良的编码习惯): http://pastebin.com/URsaFz0Q

感谢您的帮助,--迪伦

最佳答案

成功时,您的代码将 iSent 设置为零。成功时,send 不会返回 SOCKET_ERROR,因此 send(...)==SOCKET_ERROR 为 false。 False 在 C 中为零。

改变:

int iSent;
if(iSent = send(servSocket, cpHeader, strlen(cpHeader), 0) == SOCKET_ERROR)

收件人:

int iSent = send(servSocket, cpHeader, strlen(cpHeader), 0);
if(iSent == SOCKET_ERROR)

或者:

int iSent;
if( (iSent = send(servSocket, cpHeader, strlen(cpHeader), 0)) == SOCKET_ERROR)

关于c - WinSock 的 send() 总是返回 0 字节发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920952/

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