套接字connect()总是成功(TCP over ActiveSync)

时间:2010-03-02 17:20:32

标签: c++ c sockets windows-mobile activesync

我在ActiveSync上使用TCP / IP从Windows CE设备连接到Windows XP桌面。 无论桌面服务器应用程序是否实际运行,WinSock connect()函数总是成功。

以下简化代码演示了此问题:

#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。

2 个答案:

答案 0 :(得分:2)

从IIRC开始,ActiveSync中存在一个错误,即WM 5.0认为它仍然连接到Windows台式机上的ActiveSync服务器,请参阅SO上的这个答案,这可能提供线索和/或洞察这个并解释为什么socket连接总是成功...

答案 1 :(得分:0)

所以,我没有找到检查这是否是“真实”连接的方法,除了忽略此问题并尝试使用此连接。如果它不是“真实的”,通信就会失败。