帮我写一个基于IPv6的Socket例程,使用MinGW编译
时间: 2024-10-24 16:05:12 浏览: 15
基于STM32的DS28E01读写例程C语言实现
当然,以下是一个简单的IPv6 Socket示例,使用C++编写,并适用于MinGW编译环境。请注意,你需要包含必要的头文件,并安装支持IPv6的库(例如Winsock2.h在Windows上)。
```cpp
#include <winsock2.h> // Windows平台,需要包含此头文件
#include <ws2tcpip.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib") // 包含WS2_32库
int main() {
WSADATA wsaData; // 初始化Winsock
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { // 使用版本2.2
std::cerr << "Failed to initialize Winsock: " << WSAGetLastError() << std::endl;
return 1;
}
sockaddr_in6 server_addr; // IPv6服务器地址结构
server_addr.sin6_family = AF_INET6; // 设置地址族为IPv6
server_addr.sin6_port = htons(SOME_PORT_NUMBER); // 端口号,这里用htons转换为网络字节序
inet_pton(AF_INET6, "::1", &server_addr.sin6_addr); // 设置为本地环回地址
int socket_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); // 创建IPv6流式套接字
if (socket_fd == INVALID_SOCKET) {
std::cerr << "Failed to create socket: " << WSAGetLastError() << std::endl;
WSACleanup(); // 清理Winsock
return 1;
}
if (bind(socket_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) != 0) {
std::cerr << "Failed to bind socket: " << WSAGetLastError() << std::endl;
closesocket(socket_fd);
WSACleanup();
return 1;
}
std::cout << "Server listening on ::1:" << ntohs(server_addr.sin6_port) << std::endl;
// 接下来你可以添加listen(), accept(), 和处理客户端连接的部分,这里省略了
WSACleanup(); // 关闭Winsock
return 0;
}
阅读全文