套接字编程,ipv6客户端程序不能正常工作

问题描述:

下面是我在本地机器上用于IPv6客户端程序的代码。当我运行这个程序时,它只是像阅读模式一样暂停,甚至不打印“开始:”。 当我评论socket()系统调用的行时,只有它继续。套接字编程,ipv6客户端程序不能正常工作

#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); 
    } 
+2

在我们的'printf'语句末尾用'\ n'试一下你的代码,以确保输出没有卡在缓冲区中。 –

+4

'“127.0.0.1”'不是有效的IPv6地址 – Gerhardh

问题是inet_pton函数。在IPv6 formate(0:0:0:0:0:0:0:1)中传递环回地址后,程序运行良好。

您的程序停留在阻塞读取(袜子...)。 你需要添加每个你有printf \n刷新输出到STDOUT以查看printf输出!