2015-04-11 4 views
2

Здравствуйте, спасибо за любую помощь. Я пытаюсь сделать простые программы подключения сокетов в C. После каждой функции connect() с правильными параметрами у меня есть printf («connected») .Но даже если я не получаю ошибки при попытке подключения, я не вижу «подключенного» сообщения. Все, что я вижу, это черная консоль, никаких сообщений, никаких ошибок и она никогда не выходитC приложения замораживаются при подключении к серверам

Может ли это быть вызвано потому что я запускаю приложение из virtualbox?

ки добавили код непосредственно, это взято прямо из учебника сайта, так что должно work.But в моем случае это просто ждет навсегда для связи я думаю,

#include<stdio.h> 
#include<sys/socket.h> 
#include<arpa/inet.h> //inet_addr 

int main(int argc , char *argv[]) 
{ 
    int socket_desc; 
    struct sockaddr_in server; 

    //Create socket 
    socket_desc = socket(AF_INET , SOCK_STREAM , 0); 
    if (socket_desc == -1) 
    { 
     printf("Could not create socket"); 
    } 

    server.sin_addr.s_addr = inet_addr("74.125.235.20"); 
    server.sin_family = AF_INET; 
    server.sin_port = htons(80); 

    //Connect to remote server 
    if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0) 
    { 
     puts("connect error"); 
     return 1; 
    } 

    puts("Connected"); 
    return 0; 
} 
+1

Сколько времени навсегда? Вызов 'connect()' должен истечь. –

+0

Кажется, да, после того, как он истечет примерно через 1 минуту. Думаю, по крайней мере, потому что у меня не получилось соединение – rexxar2

ответ

0

connect функция может иметь замораживание как поведение (но всегда тайм-аут через некоторое время), если вы пытаетесь подключиться к адресу, который не существует или который не прослушивает этот порт. Кажется, это так.

Попробуйте запустить простой сервер с помощью nc -lk [your port here] и подключиться к 127.0.0.1 (localhost) к вашему порту.

РЕДАКТИРОВАТЬ: Не используйте порт от 0 до 1023. Вы должны быть пользователем root, чтобы связать их. Попробуйте другой, как 4242.

+0

ОК, похоже, это сработало. Так что отсутствие какого-либо сообщения пытается найти IP? – rexxar2

+0

Btw Я попытался подключиться к машине VM до 127.0.0.1 порт 80, но не работал. Но подключение к моему компьютеру-хозяину на 80-м порту. Насколько я знаю, я не запускаю какой-либо http-сервер на главной машине. – rexxar2

+0

Не пытайтесь привяжите порт на своей машине от порта 0 до 1023. Вам понадобятся права root. Попытайтесь на любой другой порт, например 4242. – Aracthor

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