【问题标题】:Socket connect() always succeeds (TCP over ActiveSync)Socket connect() 总是成功(TCP over ActiveSync)
【发布时间】:2011-01-22 20:07:06
【问题描述】:

我使用 TCP/IP over ActiveSync 从 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;
} 

这是一个错误吗?如果不是,那么确定服务器实际在线的正确方法是什么?只是尝试使用已建立的连接(接收/发送数据)?

设备:Windows CE 5.0、WinSock 2.2; 桌面:Windows XP、SP3、ActiveSync 4.5。

【问题讨论】:

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


    【解决方案1】:

    从 IIRC 来看,ActiveSync 中存在一个错误,即 WM 5.0 认为它仍然连接到 Windows 桌面 pc 上的 ActiveSync 服务器,请在SO 上查看此答案,这可能会提供线索和/或深入了解这一点,并可以解释为什么套接字连接总是成功......

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-06-06
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        相关资源
        最近更新 更多