【问题标题】:socket programming , ipv6 client program not working套接字编程,ipv6客户端程序不起作用
【发布时间】:2017-04-14 08:40:11
【问题描述】:

下面是我在本地机器上的 IPv6 客户端程序代码。当我运行这个程序时,它只是像阅读模式一样暂停,甚至不打印“开始:”。 当我注释 socket() 系统调用的行时,只有它继续。

#include<stdio.h> 
#include<string.h>    
#include<sys/socket.h>
#include<arpa/inet.h> 
#include<unistd.h>
#include<errno.h>

int main( int argc, char *argv[])
{
    printf("Start:");
    int sock;
    char msg[20];
    struct sockaddr_in6 server;

    server.sin6_family=AF_INET6;
    server.sin6_port=htons(8888);
    inet_pton(AF_INET6, "127.0.0.1", &(server.sin6_addr) );


    sock=socket(AF_INET6, SOCK_STREAM , 0);
    if( sock == -1)
    {
     perror("Socket Creation Failed");
     return 1;
    }

    printf("Connecting");

   if( connect(sock, (struct sockaddr *)&server , sizeof(server)) < 0)
   {
    perror("Connection Failed");
    return 1;
   }

   if( read(sock, msg , sizeof(msg)) < 0)
   {
    perror("Reading Failed");
    return 1;
   }

   puts(msg);
   }

【问题讨论】:

  • printf 语句的末尾使用\n 尝试您的代码,以确保输出不会卡在缓冲区中。
  • "127.0.0.1" 不是有效的 IPv6 地址

标签: c linux sockets ipv6


【解决方案1】:

问题在于 inet_pton 函数。在以 IPv6 格式 (0:0:0:0:0:0:0:1) 传递环回地址后,程序运行良好。

【讨论】:

    【解决方案2】:

    您的程序卡在阻塞读取(sock...)。 您需要添加 printf \n 的所有位置以将输出刷新到 STDOUT 以查看 printf 的输出!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多