gpt4 book ai didi

C++ - 一个非常简单的 HTTP 服务器 : WSA unreferenced error

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

我正在学习 C++,我想尝试实现一个非常简单的 HTTP 服务器,它只会输出一条文本消息。我使用 Microsoft Visual Studio 2005。

我得到:第 20 行:警告“wsa”未引用局部变量,而我正在尝试编译我的源代码。我错过了什么吗?

这是我的源代码。

#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#include <cassert>

const char html[] = "HTTP/1.1 200 OK\r\n"
"Connection: close\r\n"
"Content-type: text/html\r\n"
"\r\n"
"<html>\r\n"
"<head>\r\n"
"<title>Hello, world!</title>\r\n"
"</head>\r\n"
"<body>\r\n"
"<h1>Hello, world!</h1>\r\n"
"</body>\r\n"
"</html>\r\n\r\n";

int main() {
WSADATA wsa;

assert( WSAStartup( MAKEWORD( 2, 2 ), &wsa ) == 0 );

addrinfo *res = NULL;
addrinfo hints;

ZeroMemory( &hints, sizeof( hints ) );

hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;

assert( getaddrinfo( NULL, "80", &hints, &res ) == 0 );

SOCKET s = socket( res->ai_family, res->ai_socktype, res->ai_protocol );

assert( s != INVALID_SOCKET );
assert( bind( s, res->ai_addr, (int)res->ai_addrlen ) != SOCKET_ERROR );
assert( listen( s, SOMAXCONN ) != SOCKET_ERROR );

SOCKET client = accept( s, NULL, NULL );

assert( client != INVALID_SOCKET );

char buffer[512];
int bytes;

bytes = recv( client, buffer, 512, 0 );

for ( int i = 0; i < bytes; ++i ) {
std::cout << buffer[i];
}

assert( send( client, html, strlen( html ) - 1, 0 ) > 0 );
assert( shutdown( client, SD_BOTH ) != SOCKET_ERROR );

closesocket( client );
WSACleanup();

return 0;
}

非常感谢。

最佳答案

如果出于某种原因 visual studio 2005 正在设置 NDEBUG,断言将被预处理掉并且不会被编译。如果在 Release模式下编译,通常会发生这种情况。尝试将实际代码移到断言之外,并仅使用它们来检查返回值。

MSDN Assertions页面有关于 VS 断言的更多信息。

关于C++ - 一个非常简单的 HTTP 服务器 : WSA unreferenced error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810190/

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