在Linux環境下使用C++進行網絡編程,通常需要使用套接字(socket)庫
#include <iostream>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netinet/in.h>
socket()
函數創建一個套接字。int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Error creating socket" << std::endl;
return 1;
}
sockaddr_in
結構體,用于存儲服務器的地址信息。struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &(server_addr.sin_addr));
connect()
函數連接到服務器。if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
std::cerr << "Error connecting to server" << std::endl;
return 1;
}
send()
和recv()
函數發送和接收數據。const std::string message = "Hello, server!";
if (send(sockfd, message.c_str(), message.size(), 0) < 0) {
std::cerr << "Error sending data" << std::endl;
return 1;
}
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
int recv_len = recv(sockfd, buffer, sizeof(buffer) - 1, 0);
if (recv_len < 0) {
std::cerr << "Error receiving data" << std::endl;
return 1;
}
std::cout << "Received from server: " << buffer << std::endl;
close()
函數關閉套接字。close(sockfd);
g++
編譯器進行編譯。例如,將上述代碼保存為main.cpp
,則可以使用以下命令進行編譯:g++ main.cpp -o main -pthread
編譯完成后,使用./main
命令運行程序。
注意:這個示例中的服務器地址為127.0.0.1:8080
,你需要根據實際情況修改服務器地址和端口。此外,這個示例僅適用于TCP協議,如果需要使用UDP協議,需要相應地修改socket()
、connect()
、send()
和recv()
函數的參數。