2010-03-02 3 views
5

Я использую TCP/IP через ActiveSync для подключения с устройства Windows CE к рабочему столу Windows XP. Функция WinSock connect() всегда выполняется успешно, независимо от того, работает ли настольное серверное приложение.Socket connect() всегда успешно (TCP через ActiveSync)

Следующая упрощенным код демонстрирует эту проблему:

#include "stdafx.h" 
#include <Winsock2.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    const int Port = 5555; 
    const char * HostName = "ppp_peer"; 

    WSADATA wsadata; 
    if (WSAStartup(MAKEWORD(1, 1), &wsadata) != 0) 
     return 1; 

    struct hostent * hp = gethostbyname(HostName); 
    if (hp == NULL) 
     return 1; 

    struct sockaddr_in sockaddr; 
    memset(&sockaddr, 0, sizeof(sockaddr)); 
    sockaddr.sin_family = AF_INET; 
    sockaddr.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr; 
    sockaddr.sin_port = htons(Port);  

    int sock = socket(AF_INET, SOCK_STREAM, 0); 
    if (sock == SOCKET_ERROR) 
     return 1; 

    int result = connect(sock, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); 
    // result always 0 (success) here 

    closesocket(sock); 

    return 0; 
} 

Является ли это ошибка? Если нет, то какой правильный способ определить, что сервер фактически находится в сети? Только попытаться использовать установленное соединение (recv/send data)?

Прибор: Windows CE 5.0, WinSock 2.2; Рабочий стол: Windows XP, SP3, ActiveSync 4.5.

ответ

0

Итак, я не нашел способ проверить, действительно ли это «реальное» соединение, кроме как игнорировать эту проблему и попытаться использовать это соединение. Если это не «реально», сообщение не удастся.

2

Из чего у IIRC есть ошибка в ActiveSync, поскольку WM 5.0 считает, что он все еще подключен к серверу ActiveSync на ПК для ПК Windows, см. Этот ответ здесь, на SO, который может дать ключ и/или проницательность в этом и может объяснить, почему соединение сокета всегда преуспевает ...

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