2010-03-02 43 views
5

Tôi đang sử dụng TCP/IP trên ActiveSync để kết nối từ thiết bị Windows CE với máy tính để bàn Windows XP. Hàm WinSock connect() luôn thành công, cho dù ứng dụng máy chủ để bàn có thực sự chạy hay không.Ổ cắm kết nối() luôn thành công (TCP qua ActiveSync)

Mã đơn giản dưới đây trình bày vấn đề này:

#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; 
} 

Đây có phải là một lỗi? Nếu không, một cách chính xác để xác định rằng máy chủ thực sự là trực tuyến là gì? Chỉ để cố gắng sử dụng kết nối được thiết lập (recv/send data)?

Thiết bị: Windows CE 5.0, WinSock 2.2; Máy tính để bàn: Windows XP, SP3, ActiveSync 4.5.

Trả lời

0

Vì vậy, tôi không tìm cách kiểm tra xem đây có phải là kết nối 'thực' hay không, ngoài việc bỏ qua vấn đề này và cố gắng sử dụng kết nối này. Nếu nó không phải là 'thực', giao tiếp sẽ thất bại.

2

Từ những gì IIRC, có một lỗi trong ActiveSync ở chỗ WM 5.0 cho rằng nó vẫn kết nối với máy chủ ActiveSync trên máy tính để bàn Windows, xem câu trả lời ở đây trên SO. vào điều này và có thể giải thích tại sao ổ cắm kết nối luôn thành công ...

Các vấn đề liên quan