ZBLOG

Linux c ipv6 tcp连接的客户端和服务端

在Linux下,使用C语言编写IPv6的TCP客户端和服务端可以遵循以下步骤:

  1. 创建套接字:使用socket()函数创建一个IPv6套接字。指定地址族(AF_INET6)和套接字类型(SOCK_STREAM)。
  2. 绑定地址:对于服务器端,使用bind()函数将套接字绑定到特定的IPv6地址和端口号上。对于客户端,不需要显式绑定本地地址。
  3. 监听连接请求(仅服务器):对于服务器端,使用listen()函数监听来自客户端的连接请求。
  4. 接受连接(仅服务器):使用accept()函数接受来自客户端的连接请求,并返回一个新的套接字用于与该客户端进行通信。
  5. 连接到服务器(仅客户端):对于客户端,使用connect()函数与服务器建立连接。指定目标IPv6地址和端口号。
  6. 数据传输:通过已建立的连接进行数据传输,可以使用send()recv()函数发送和接收数据。

以下是一个简单的示例代码,展示了如何实现一个简单的IPv6 TCP服务器和客户端:

IPv6 TCP 服务端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 12345

int main() {
    int server_fd, new_socket;
    struct sockaddr_in6 server_addr, client_addr;
    socklen_t client_len = sizeof(client_addr);
    char buffer[1024] = {0};
    
    // 创建套接字
    if ((server_fd = socket(AF_INET6, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    
    // 设置服务器地址和端口
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin6_family = AF_INET6;
    server_addr.sin6_port = htons(PORT);
    
    // 绑定地址
    if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    
    // 监听连接请求
    if (listen(server_fd, 3) < 0) {
        perror("listen failed");
        exit(EXIT_FAILURE);
    }
    
    // 接受连接请求并处理数据
    if ((new_socket = accept(server_fd, (struct sockaddr *)&client_addr, &client_len)) < 0) {
        perror("accept failed");
        exit(EXIT_FAILURE);
    }
    
   // 接收客户端发送的数据
   read(new_socket , buffer, 1024);
   
   printf("Received message from client: %s\n", buffer);

   return 0;
}

IPv6 TCP 客户端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 12345

int main() {
   int sock = 0;
   struct sockaddr_in6 serv_addr;
   char *hello = "Hello from client";
   
   // 创建套接字
   if ((sock = socket(AF_INET6, SOCK_STREAM, 0)) < 0) {
       printf("\n Socket creation error \n");
       return -1;
   }
   
   // 设置服务器地址和端口
   memset(&serv_addr, '0', sizeof(serv_addr));
   serv_addr.sin6_family = AF_INET6;
   serv_addr.sin6_port = htons(PORT);
   
   // 将IPv6地址转换为网络字节序
   if (inet_pton(AF_INET6, "::1", &serv_addr.sin6_addr) <= 0) {
       printf("\nInvalid address/ Address not supported \n");
       return -1;
   }
   
   // 连接到服务器
   if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
       printf("\nConnection Failed \n");
       return -1;
   }
   
   // 发送数据给服务器
   send(sock , hello , strlen(hello) , 0 );
  
    return 0;
}

以上代码仅作为示例,实际使用时可能需要进行错误处理、增加更多的功能和逻辑。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?