2016-11-30 9 views
0

Ниже приведен мой код для клиентской программы IPv6 на локальной машине. Когда я запускаю эту программу, он просто приостанавливается, как режим чтения, даже не печатая «Start:». Когда я прокомментирую системный вызов 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

Попробуйте использовать свой код с '\ n' в конце наших' 'printf'', чтобы убедиться, что вывод не застрял в буфере. –

+4

'" 127.0.0.1 "' недействительный адрес IPv6 – Gerhardh

ответ

0

Проблема была в функции inet_pton. После прохождения петлевого адреса в формировании IPv6 (0: 0: 0: 0: 0: 0: 0: 1) программа работает нормально.

0

Ваша программа застревает при чтении блокировки (носок ...). Вам нужно добавить все, где у вас есть printf \n, чтобы вывести вывод в STDOUT, чтобы увидеть выход с помощью printf!

 Смежные вопросы

  • Нет связанных вопросов^_^