2014-01-21 2 views
3

Я пытаюсь подключиться к устройству с помощью Connect api. И это дает мне ошибку WSAECONNREFUSED. Это происходит, когда у меня есть два устройства, и я пытаюсь подключиться к одному из устройств. Если я подключу только одно устройство, то connectino пройдет через штраф.Connect(): WSAECONNREFUSED on connect

Может ли кто-нибудь из вас дать мне знать проблему здесь.

Вот мой код:

sockaddr_in my_addr; 

my_addr.sin_family = (USHORT)AF_INET ; 
my_addr.sin_port = htons((USHORT)host_port); 

memset(&(my_addr.sin_zero), 0, (size_t)8); 
my_addr.sin_addr.s_addr = inet_addr(pHostName); 

if (connect((SOCKET)*uiSocket, (struct sockaddr*)&my_addr, 
    sizeof(my_addr)) == SOCKET_ERROR) 
{ 
    int err = WSAGetLastError(); 
    fprintf(stderr, "Error connecting socket %d\n", WSAGetLastError()); 
    closeCxn(); 
    return false; 
} 

Спасибо.

+0

Покажите нам свой код. – selbie

ответ

3

Обычно ECONNREFUSED означает, что компьютер, к которому вы пытаетесь подключиться, отказался принять соединение. Обычная причина этого в том, что программа не прослушивает указанный порт на целевом компьютере.

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

телнет 192.168.1.99 1234

(Заменить пример аргументы выше с соответствующим IP-адрес и номер порта, конечно). Если telnet немедленно выйдет с помощью метода «Отказано в подключении», вы знаете, что проблема на удаленном компьютере. Если он подключается и остается подключенным, проблема скорее с программой вашего локального компьютера.

+0

Означает ли это, что ПК существует? Мы пытаемся подключить ПК через установление TCP-соединения, чтобы знать, что это в сети, и если мы получили такую ​​ошибку, значит, компьютер включен, верно? –

+2

ECONNREFUSED означает, что ваши пакеты TCP-соединения достигли удаленного ПК, а удаленный ПК ответил пакетом, в котором указано, что он не желает принимать TCP-соединение в указанном вами порту. Так да. –

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