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.