5

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。

4

2 に答える 2

2

IIRCから、WM 5.0がWindowsデスクトップPC上のActiveSyncサーバーにまだ接続されていると見なすという点で、ActiveSyncにバグがあります。SOでこの回答を参照してください。これは、これに関する手がかりや洞察を提供する可能性があります。ソケット接続が常に成功する理由を説明してください...

于 2010-03-02T17:31:53.567 に答える
0

したがって、この問題を無視してこの接続を使用する以外に、これが「実際の」接続であるかどうかを確認する方法が見つかりませんでした。「本物」でない場合、通信は失敗します。

于 2010-03-06T16:21:38.937 に答える