在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()
函数的参数。