Netinet、NetDBが見つかりません C++ネットワークライブラリ

C言語向けのネットワークライブラリであるnetinetとnetdbは、C++ではヘッダファイル<sys/socket.h>とをインクルードすることで利用することができる。

ネットワークライブラリを使用する<sys/socket.h> と ヘッダファイルの使用方法を示す簡単なサンプルコードを以下に示します。

#include <iostream>
#include <sys/socket.h>
#include <netdb.h>
int main() {
// 创建一个socket
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == -1) {
std::cout << "Error creating socket." << std::endl;
return 1;
}
// 获取IP地址
struct hostent* host = gethostbyname("www.example.com");
if (host == nullptr) {
std::cout << "Error retrieving IP address." << std::endl;
return 1;
}
struct in_addr** addressList = (struct in_addr**)host->h_addr_list;
std::string ipAddress = inet_ntoa(*addressList[0]);
std::cout << "IP address: " << ipAddress << std::endl;
// 连接到服务器
struct sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(80);
if (inet_pton(AF_INET, ipAddress.c_str(), &(serverAddress.sin_addr)) <= 0) {
std::cout << "Invalid IP address." << std::endl;
return 1;
}
if (connect(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
std::cout << "Error connecting to server." << std::endl;
return 1;
}
// 发送数据
std::string message = "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n";
if (send(serverSocket, message.c_str(), message.length(), 0) < 0) {
std::cout << "Error sending data." << std::endl;
return 1;
}
// 接收服务器响应
char buffer[4096];
std::string response;
while (true) {
memset(buffer, 0, sizeof(buffer));
int bytesRead = recv(serverSocket, buffer, sizeof(buffer) - 1, 0);
if (bytesRead <= 0) {
break;
}
response += buffer;
}
// 关闭socket
close(serverSocket);
// 打印服务器响应
std::cout << response << std::endl;
return 0;
}

このサンプルコードでは、ソケットオブジェクトが作成されます、次にgethostbynameを使用してwww.example.comのIPアドレスを取得します、次にconnectを使用してサーバーに接続し、次にHTTPリクエストを送信してサーバーのレスポンスを受信し、最後にソケットを閉じてレスポンスを出力します。

ご注意ください、これは単なる簡単な例です。実際のWebライブラリ使用には、より多くのエラー処理とロジックが必要になる場合があります。

bannerAds