下面是一个简单的IPv6编程示例,使用C语言和Linux平台上的socket API进行编写。这个示例演示了如何创建IPv6套接字、绑定地址、监听连接以及发送和接收数据。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define BUFFER_SIZE 1024
int main() {
int serverSocket, clientSocket;
struct sockaddr_in6 serverAddr, clientAddr;
char buffer[BUFFER_SIZE];
socklen_t addrLen = sizeof(clientAddr);
// 创建IPv6套接字
serverSocket = socket(AF_INET6, SOCK_STREAM, 0);
if (serverSocket == -1) {
perror("Failed to create socket");
exit(1);
}
// 初始化服务器地址结构
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin6_family = AF_INET6;
serverAddr.sin6_port = htons(8888);
serverAddr.sin6_addr = in6addr_any;
// 绑定地址和端口
if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {
perror("Failed to bind address");
exit(1);
}
// 监听连接请求
if (listen(serverSocket, 5) == -1) {
perror("Failed to listen");
exit(1);
}
printf("Server listening on port 8888...\n");
while(1) {
// 接受客户端连接
clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &addrLen);
if (clientSocket == -1) {
perror("Failed to accept connection");
exit(1);
}
printf("Client connected.\n");
// 接收客户端发送的数据
memset(buffer, 0, BUFFER_SIZE);
ssize_t bytesRead = recv(clientSocket, buffer, BUFFER_SIZE-1, 0);
if (bytesRead == -1) {
perror("Failed to receive data");
exit(1);
}
printf("Received: %s\n", buffer);
// 发送响应给客户端
const char* response = "Hello from server!";
ssize_t bytesSent = send(clientSocket, response, strlen(response), 0);
if (bytesSent == -1) {
perror("Failed to send response");
exit(1);
}
// 关闭与客户端的连接
close(clientSocket);
}
// 关闭服务器套接字
close(serverSocket);
return 0;
}
这个示例代码创建了一个简单的TCP服务器,通过IPv6监听8888端口。它接受来自客户端的连接请求,并能够收发数据。你可以根据需要修改代码以适应特定的应用场景和需求。
请注意,IPv6编程相对于IPv4编程有一些细微的差异,例如使用AF_INET6
代替AF_INET
来创建IPv6套接字,以及使用struct sockaddr_in6
结构体来表示IPv6地址。此外,其他方面的编程逻辑与IPv4编程类似。
内容由零声教学AI助手提供,问题来源于学员提问