2016-11-30 1 views
0

다음은 로컬 컴퓨터의 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

답변

0

문제는 inet_pton 기능입니다. IPv6 formate (0 : 0 : 0 : 0 : 0 : 0 : 0 : 1)의 루프백 주소를 전달한 후 프로그램이 제대로 실행됩니다.

0

프로그램이 차단 읽기 (sock ...)에서 멈췄습니다. printf가있는 곳마다 \n을 추가하여 printf로 출력을 보려면 STDOUT으로 출력을 플러시해야합니다!