下面是一个简单的IPv6编程示例,使用C++语言和Socket API来创建一个基于IPv6的服务器和客户端。
服务器端代码:
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int main() {
// 创建 socket
int serverSocket = socket(AF_INET6, SOCK_STREAM, 0);
if (serverSocket == -1) {
std::cerr << "Failed to create socket." << std::endl;
return -1;
}
// 设置 IPv6 地址和端口
sockaddr_in6 serverAddress{};
serverAddress.sin6_family = AF_INET6;
serverAddress.sin6_port = htons(8080); // 设置端口号
// 将地址绑定到 socket 上
if (bind(serverSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) == -1) {
std::cerr << "Failed to bind address to the socket." << std::endl;
close(serverSocket);
return -1;
}
// 监听连接请求
if (listen(serverSocket, 5) == -1) {
std::cerr << "Failed to listen for connections." << std::endl;
close(serverSocket);
return -1;
}
std::cout << "Server is listening for incoming connections..." << std::endl;
// 接受客户端连接
sockaddr_in6 clientAddress{};
socklen_t clientAddrLen = sizeof(clientAddress);
int clientSocket = accept(serverSocket, (struct sockaddr *) &clientAddress, &clientAddrLen);
if (clientSocket == -1) {
std::cerr << "Failed to accept client connection." << std::endl;
close(serverSocket);
return -1;
}
// 处理客户端请求
char buffer[BUFFER_SIZE];
memset(buffer, 0, BUFFER_SIZE);
ssize_t bytesRead = recv(clientSocket, buffer, BUFFER_SIZE - 1, 0);
if (bytesRead == -1) {
std::cerr << "Failed to read data from client." << std::endl;
close(clientSocket);
close(serverSocket);
return -1;
}
std::cout << "Received message from client: " << buffer << std::endl;
// 回复客户端
const char *response = "Hello from server!";
ssize_t bytesSent = send(clientSocket, response, strlen(response), 0);
if (bytesSent == -1) {
std::cerr << "Failed to send response to client." << std::endl;
close(clientSocket);
close(serverSocket);
return -1;
}
// 关闭连接
close(clientSocket);
close(serverSocket);
std::cout << "Connection closed." << std::endl;
return 0;
}
客户端代码:
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int main() {
// 创建 socket
int clientSocket = socket(AF_INET6, SOCK_STREAM, 0);
if (clientSocket == -1) {
std::cerr << "Failed to create socket." << std::endl;
return -1;
}
sockaddr_in6 serverAddress{};
serverAddress.sin6_family = AF_INET6;
serverAddress.sin6_port = htons(8080); // 设置服务器端口号
inet_pton(AF_INET6, "::1", &(serverAddress.sin6_addr)); // 设置服务器 IPv6 地址
// 连接到服务器
if (connect(clientSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) == -1) {
std::cerr << "Failed to connect to server." << std::endl;
close(clientSocket);
return -1;
}
const char *message = "Hello from client!";
ssize_t bytesSent = send(clientSocket, message, strlen(message), 0);
if (bytesSent == -1) {
std::cerr << "Failed to send data to server." << std::endl;
close(clientSocket);
return -1;
}
char buffer[BUFFER_SIZE];
memset(buffer, 0, BUFFER_SIZE);
ssize_t bytesRead = recv(clientSocket, buffer, BUFFER_SIZE - 1, 0);
if (bytesRead == -1) {
std::cerr << "Failed to read response from server." << std::endl;
close(clientSocket);
return -1;
}
std::cout << "Received response from server: " << buffer << std::endl;
close(clientSocket);
return 0;
}
这是一个简单的基于IPv6的服务器和客户端示例,服务器监听本地 IPv6 地址的8080端口,并接受来自客户端的连接请求。一旦连接建立,服务器将接收来自客户端的消息,并回复”Hello from server!“。客户端向指定的服务器发送”Hello from client!“消息,并接收并打印来自服务器的响应。
请
内容由零声教学AI助手提供,问题来源于学员提问