2010-03-02 15 views
5

Windows CE aygıtından Windows XP masaüstüne bağlanmak için ActiveSync üzerinden TCP/IP kullanıyorum. Masaüstü sunucu uygulamasının gerçekten çalışıp çalışmadığı fark etmeksizin WinSock connect() işlevi her zaman başarılı olur.Socket connect() her zaman başarılı olur (ActiveSync üzerinden TCP)

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

Bu bir hata mı:

aşağıdaki basitleştirilmiş kod, bu sorunun gösterir? Değilse, sunucunun aslında çevrimiçi olduğunu belirlemek için doğru bir yol nedir? Sadece kurulan bağlantıyı kullanmaya çalışmak için (recv/data gönder)?

Cihaz: Windows CE 5,0, WinSock 2.2; Masaüstü: Windows XP, SP3, ActiveSync 4.5.

cevap

0

Yani, bu sorunun göz ardı edilmesi ve bu bağlantıyı kullanmayı denemek dışında, bunun 'gerçek' bağlantı olup olmadığını kontrol etme yolunu bulamadım. Eğer 'gerçek' değilse, iletişim başarısız olur.

2

Ne IIRC'den, ActiveSync'de bir hata vardır, bu sürümde WM 5.0 hala Windows masaüstü bilgisayarındaki ActiveSync sunucusuna bağlı olduğunu düşünmektedir, buradaki yanıtı bir ipucu ve/veya içgörü sağlayacak olan SO adresine bakın. Buna ve soket bağlantısının neden başarılı olduğunu açıklayabiliriz ...

İlgili konular