2014-09-12 6 views
0

Я запускаю linux mint и набрал в командном терминале некоторые команды для подключения к моему локальному хосту, но он продолжает говорить о сбое соединения.Не удается подключиться к localhost

Вот что я печатаю:

echo "echo test" | ./<my executable> localhost <port #> 

Вот мой код для подключения:

int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen); 
    if (r < 0) { 
    printf("Connection failed\n"); 
    exit(1); 
    } 

Вот полный код:

int main(int argc, char *argv[]) { 
    if (argc != 3) { 
    printf("Invalid arguments\n"); 
    exit(1); 
    } 

    char *serverIP = argv[1]; /*Server hostname*/ 
    char *portNumber = argv[2]; /*Port Number*/ 
    void *numericAddress; 
    char addrBuffer[INET6_ADDRSTRLEN]; 
    in_port_t port; 
    char buffer_stdin[65535]; 
    char buffer_stdout[65535]; 
    int bytes_read = 0; 
    int bytes_written = 0; 

    /*getting integral number of string representation of port number*/ 
    in_port_t servPort = atoi(argv[2]); 

    /*------------------get binary number of hostname-----------------*/ 
    struct addrinfo addrCriteria; 
    memset(&addrCriteria, 0, sizeof(addrCriteria)); 
    addrCriteria.ai_family = AF_INET; 
    addrCriteria.ai_socktype = SOCK_STREAM; 
    addrCriteria.ai_protocol = IPPROTO_TCP; 

    struct addrinfo *addrList; 

    int rtnVal = getaddrinfo(serverIP, portNumber, &addrCriteria, &addrList); 
    if (rtnVal != 0) { 
    printf("getaddrinfo() failed\n"); 
    exit(1); 
    } 

    numericAddress = &((struct sockaddr_in *) (addrList->ai_addr))->sin_addr; 
    /*Converting port to binary*/ 
    ((struct sockaddr_in *)(addrList->ai_addr))->sin_port = htons(servPort); 
    /*----------------------------------------------------------------*/ 

    inet_ntop(addrList->ai_addr->sa_family, numericAddress, addrBuffer, sizeof(addrBuffer)); 
    printf("IP ADDRESS: %s\n", addrBuffer); 

    /*Creating socket*/ 
    int sock = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); 
    if (sock < 0) { 
    printf("error creating socket\n"); 
    exit(1); 
    } 

    /*Establish connection to the echo server*/ 
    int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen); 
    if (r < 0) { 
    perror("Connection failed\n"); 
    exit(1); 
    } 

    /*Reading from stdin and writing to socket until stdin ends 
    bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin)); 
    write(sock, buffer_stdin, bytes_read);*/ 

    while ((bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin)-1)) > 0) { 
    write(sock, buffer_stdin, bytes_read); 
    } 

    /*Shutting down write end of socket*/ 
    int r_shutdown = shutdown(sock, SHUT_WR); 
    if (r_shutdown < 0) { 
    printf("Shutting down write end of socket failed\n"); 
    exit(1); 
    } 

    /*Reading from socket and writing to stdout until socket ends*/ 
    while ((bytes_read = read(sock, buffer_stdout, sizeof(buffer_stdout)-1)) > 0) { 
    write(1, buffer_stdout, bytes_read); 
    } 

    close(sock); 
    exit(0); 
} 

Мне нужно установить ли что-то для подключения к локальному хосту?

Благодаря

EDIT: ОК здесь обновление:

Сначала я набираю в командной терминале: CHMOD а + х ехе (где ехе наш UDP сервер) тогда я ввожу: ./ exe, например ./exe 2525 , затем я печатаю: echo "echo test" | ./ localhost

Но когда это происходит, терминал не возвращает «эхо-тест», он просто сидит там, как если бы он ожидал ввода от пользователя или хотел, если бы он застрял в бесконечном цикле.

+1

Вы не показали нам достаточно коды. Кроме того, используйте 'perror (« Connection failed \ n »);' вместо 'printf (« Connection failed \ n »);' чтобы узнать, почему соединение не удалось –

+0

в порядке, я попробую, чтобы – umdcoder

+0

сказал: «connection connected». Я буду оставлять остальную часть своего кода – umdcoder

ответ

0

Похоже, что вам нужно поставить локальный сервер в командной строке:

./exe localhost 2525 

или:

echo test | ./exe localhost 2525 
+0

Все еще не работает. Я думаю, что вы были правы, когда говорили о великом эндисе против маленького эндиана, потому что в нашем классе профессор сказал, что это будет большой проблемой для проектов, если вы не используете правильный метод. Итак, какую мне попробовать? htonl() вместо htons()? – umdcoder

+0

Я верю, что у вас все в порядке. Выполняет команду 'netstat -an -A inet | grep: 2525' показ вашего слушателя-профессора? Если нет, это ответ –

+0

ya ничего не происходит, когда я печатаю это. Я ничего не получаю. Что значит? – umdcoder

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