2010-03-02 12 views
5

Estoy usando TCP/IP sobre ActiveSync para conectarme desde el dispositivo con Windows CE al escritorio con Windows XP. La función WinSock connect() siempre tiene éxito, sin importar si la aplicación del servidor de escritorio se está ejecutando realmente.El socket connect() siempre tiene éxito (TCP sobre ActiveSync)

El siguiente código simplificado muestra este problema:

#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; 
} 

Es esto un error? Si no, ¿cuál es la forma correcta de determinar que el servidor está realmente en línea? ¿Solo para tratar de usar la conexión establecida (recv/send data)?

Dispositivo: Windows CE 5.0, WinSock 2.2; Escritorio: Windows XP, SP3, ActiveSync 4.5.

Respuesta

0

Así que no encontré la manera de comprobar si se trata de una conexión "real", salvo ignorar este problema e intentar utilizar esta conexión. Si no es 'real', la comunicación fallará.

2

Desde lo que IIRC, hay un error en ActiveSync en que el WM 5.0 piensa que todavía está conectado al servidor ActiveSync en el PC de escritorio de Windows, consulte esta respuesta aquí en SO que podría proporcionar una pista y/o visión en esto y podría explicar por qué la conexión de socket siempre tiene éxito ...

Cuestiones relacionadas