ZBLOG

ipv6编程例子

下面是一个简单的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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=2320

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?