2010-03-02 29 views
5

我使用ActiveSync上的TCP/IP從Windows CE設備連接到Windows XP桌面。 無論桌面服務器應用程序是否實際運行,WinSock connect()函數都會成功。套接字連接()始終成功(TCP over 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數據)?

設備:Windows CE 5.0,WinSock 2.2; 桌面:Windows XP,SP3,ActiveSync 4.5。

回答

0

所以,我沒有找到方法來檢查這是否是'真正的'連接,除了忽略此問題並嘗試使用此連接。如果不是「真實的」,通信將失敗。

2

從IIRC中可以看出,ActiveSync中存在一個錯誤,即WM 5.0認爲它仍然連接到Windows桌面PC上的ActiveSync服務器,請參閱SO上的這個答案,這可能會提供線索和/或洞察力到這個,並可以解釋爲什麼套接字連接總是成功......