ipv6 server code
时间: 2023-09-30 12:11:46 浏览: 90
以下是一个简单的 IPv6 服务器示例代码,使用 C 语言编写:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define SERVER_PORT 8080
#define MAXBUFLEN 1024
int main(int argc, char *argv[]) {
int sockfd, connfd;
struct sockaddr_in6 server_addr, client_addr;
char buffer[MAXBUFLEN];
int bytes_read;
// 创建 IPv6 套接字
sockfd = socket(AF_INET6, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
// 初始化服务器地址结构体
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin6_family = AF_INET6;
server_addr.sin6_port = htons(SERVER_PORT);
server_addr.sin6_addr = in6addr_any;
// 绑定地址和端口到套接字
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("bind");
exit(EXIT_FAILURE);
}
// 监听端口
if (listen(sockfd, 10) == -1) {
perror("listen");
exit(EXIT_FAILURE);
}
printf("IPv6 server listening on port %d...\n", SERVER_PORT);
while (1) {
// 接受客户端连接请求
memset(&client_addr, 0, sizeof(client_addr));
socklen_t client_len = sizeof(client_addr);
connfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_len);
if (connfd == -1) {
perror("accept");
continue;
}
// 打印客户端连接信息
char client_ip[INET6_ADDRSTRLEN];
if (inet_ntop(AF_INET6, &client_addr.sin6_addr, client_ip, INET6_ADDRSTRLEN) == NULL) {
perror("inet_ntop");
continue;
}
printf("Accepted connection from %s:%d\n", client_ip, ntohs(client_addr.sin6_port));
// 读取客户端发送的数据并打印
while ((bytes_read = read(connfd, buffer, MAXBUFLEN)) > 0) {
buffer[bytes_read] = '\0';
printf("Received %d bytes from client: %s\n", bytes_read, buffer);
}
// 关闭连接
close(connfd);
printf("Connection closed.\n");
}
// 关闭服务器套接字
close(sockfd);
return 0;
}
```
这个服务器使用 IPv6 地址和端口 8080 监听客户端连接请求。每当一个客户端连接时,它会打印客户端的 IP 地址和端口,然后读取客户端发送的数据并打印,然后关闭连接。该服务器支持同时连接多个客户端。