c++ - Socket connect() 总是成功(TCP over ActiveSync)

标签 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;
} 

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

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

最佳答案

根据 IIRC,ActiveSync 中存在一个错误,因为 WM 5.0 认为它仍然连接到 Windows 台式机上的 ActiveSync 服务器,请在此处查看此答案 SO这可能会为此提供线索和/或洞察力,并可以解释为什么套接字连接总是成功...

关于c++ - Socket connect() 总是成功(TCP over ActiveSync),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2365180/

相关文章:

c - 使用memcpy时重叠的含义

c# - 通过 NetworkStream(套接字)写入/读取字符串以进行聊天

java - 通过WIFI高速传输文件

c - 使用 make 将多个 .c 文件链接到一个程序中?

c++ - 什么时候需要修改socket的接收缓冲区大小?

c++ - glm::lookAt 给出了 2D 轴的意外结果

c++ - "a subsequent condition of that statement"的标准是什么意思?

c++ - 从 uint8_t 到 int 的隐式转换出错了,而显式转换顺利

c++ - 将 C 字符串转换为 int 数组

c - 我怎样才能从矩阵中得到角度