64,646
社区成员
发帖
与我相关
我的任务
分享
case IDC_2:
if (iResult = WSAStartup(MAKEWORD(2, 2), &wsaData))
{
EditW(hEdit, TEXT("Startup Error # %i \n"), iResult);
//MessageBox(Dlg, TEXT("WSAStartUp Failed"), TEXT("Error"), MB_OK);
return TRUE;
}
EditW(hEdit, TEXT("WSAStartup %hs \n"), wsaData.szDescription); // %hs 是ASSCI码字符串输出
ZeroMemory(&hint, sizeof(hint));
hint.ai_family = AF_UNSPEC;
hint.ai_protocol = IPPROTO_TCP;
hint.ai_socktype = SOCK_STREAM;
iResult = getaddrinfo(szIP, DEFAULT_PORT, &hint, &Result); // 这里将ip 端口放入了sockaddr/sockaddr_in结构里了 ,并且将ip转成网络字节
if (iResult != 0)
{
EditW(hEdit, TEXT("Get Address Info Failed : %s \r\n"), GetLastError());
WSACleanup();
return TRUE;
}
sock = socket(Result->ai_family, Result->ai_socktype, Result->ai_protocol);
if (sock == INVALID_SOCKET)
{
EditW(hEdit, TEXT("Socket creation error #%i.\r\n"), WSAGetLastError());
freeaddrinfo(Result);
WSACleanup();
}
EditW(hEdit, TEXT("Socket %i created.\r\n"), sock);
if (SOCKET_ERROR == WSAAsyncSelect(sock, Dlg, WM_SOCK_NOTIFY, FD_CONNECT | FD_READ))
{
EditW(hEdit, TEXT("WSAAsyncSelect error #%i. \r\n"), WSAGetLastError());
closesocket(sock);
WSACleanup();
return TRUE;
}
size = connect(sock, Result->ai_addr, Result->ai_addrlen); // ai_addr 是 sockaddr结构
if (iResult == SOCKET_ERROR) {
EditW(hEdit,TEXT("connect function failed with error: %ld\n"), WSAGetLastError());
iResult = closesocket(sock);
if (iResult == SOCKET_ERROR)
EditW(hEdit,L"closesocket function failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
SetTimer(Dlg, 1, 1000, NULL);
SetWindowText(hButton, TEXT("Disconect"));
SetWindowLong(hButton, GWL_ID, IDC_CANCEL);
return TRUE;
case IDC_2:
if (iResult = WSAStartup(MAKEWORD(2, 2), &wsaData))
{
EditW(hEdit, TEXT("Startup Error # %i \n"), iResult);
//MessageBox(Dlg, TEXT("WSAStartUp Failed"), TEXT("Error"), MB_OK);
return TRUE;
}
EditW(hEdit, TEXT("WSAStartup %hs \n"), wsaData.szDescription); // %hs 是ASSCI码字符串输出
ZeroMemory(&hint, sizeof(hint));
hint.ai_family = AF_UNSPEC;
hint.ai_protocol = IPPROTO_TCP;
hint.ai_socktype = SOCK_STREAM;
iResult = getaddrinfo(szIP, DEFAULT_PORT, &hint, &Result); // 这里将ip 端口放入了sockaddr/sockaddr_in结构里了 ,并且将ip转成网络字节
if (iResult != 0)
{
EditW(hEdit, TEXT("Get Address Info Failed : %s \r\n"), GetLastError());
WSACleanup();
return TRUE;
}
sock = socket(Result->ai_family, Result->ai_socktype, Result->ai_protocol);
if (sock == INVALID_SOCKET)
{
EditW(hEdit, TEXT("Socket creation error #%i.\r\n"), WSAGetLastError());
freeaddrinfo(Result);
WSACleanup();
}
EditW(hEdit, TEXT("Socket %i created.\r\n"), sock);
if (SOCKET_ERROR == WSAAsyncSelect(sock, Dlg, WM_SOCK_NOTIFY, FD_CONNECT | FD_READ))
{
EditW(hEdit, TEXT("WSAAsyncSelect error #%i. \r\n"), WSAGetLastError());
closesocket(sock);
WSACleanup();
return TRUE;
}
size = connect(sock, Result->ai_addr, Result->ai_addrlen); // ai_addr 是 sockaddr结构
if (iResult == SOCKET_ERROR) {
EditW(hEdit,TEXT("connect function failed with error: %ld\n"), WSAGetLastError());
iResult = closesocket(sock);
if (iResult == SOCKET_ERROR)
EditW(hEdit,L"closesocket function failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
SetTimer(Dlg, 1, 1000, NULL);
SetWindowText(hButton, TEXT("Disconect"));
SetWindowLong(hButton, GWL_ID, IDC_CANCEL);
return TRUE;
赵4老师 别打酱油呀,千万行代码间 等你来改 上将首级啊case WM_SOCK_NOTIFY:
wEvent = WSAGETSELECTEVENT(lParam);
wError = WSAGETSELECTERROR(lParam);
switch (wEvent)
{
case FD_CONNECT:
if (wError)
{
EditW(hEdit, TEXT("\nConnect error #%i. \r\n"), wError);
SendMessage(Dlg, WM_COMMAND, IDC_CANCEL, NULL);
return TRUE;
}
EditW(hEdit, TEXT("\nConnected to %hs. \r\n"), szIP);
recv(sock, (char*)&time, 4, MSG_PEEK); // 这里 time没变3435973836
return TRUE;
case FD_READ:
KillTimer(Dlg, 1);
if (wError)
{
EditW(hEdit, TEXT("\nFD_READ error #%i."), wError);
SendMessage(Dlg, WM_COMMAND, IDC_CANCEL, 0);
return TRUE;
}
recv(sock, (char*)&time, 4, 0); // 这里数值没变3435973836
time = ntohl(time);
EditW(hEdit, TEXT("\nTotal time is %d second\n"), time);
iResult = SetTime(time);
if (!iResult)
{
EditW(hEdit, TEXT("Set System Time Failed! #%d"), iResult);
}
return TRUE;
以上是我的源代码,参考书上的。 然后书上的代码 第二个 不带peek的Recv函数里 改变了 time的值,从3435973836改为36....... 我真是不理解为什么,百思不得其解 。书代码变之后的 日期是对的,而我的值没变 就是19xx年了[/quote]
具体建议单步调试,然后观察分析原因case WM_SOCK_NOTIFY:
wEvent = WSAGETSELECTEVENT(lParam);
wError = WSAGETSELECTERROR(lParam);
switch (wEvent)
{
case FD_CONNECT:
if (wError)
{
EditW(hEdit, TEXT("\nConnect error #%i. \r\n"), wError);
SendMessage(Dlg, WM_COMMAND, IDC_CANCEL, NULL);
return TRUE;
}
EditW(hEdit, TEXT("\nConnected to %hs. \r\n"), szIP);
recv(sock, (char*)&time, 4, MSG_PEEK); // 这里 time没变3435973836
return TRUE;
case FD_READ:
KillTimer(Dlg, 1);
if (wError)
{
EditW(hEdit, TEXT("\nFD_READ error #%i."), wError);
SendMessage(Dlg, WM_COMMAND, IDC_CANCEL, 0);
return TRUE;
}
recv(sock, (char*)&time, 4, 0); // 这里数值没变3435973836
time = ntohl(time);
EditW(hEdit, TEXT("\nTotal time is %d second\n"), time);
iResult = SetTime(time);
if (!iResult)
{
EditW(hEdit, TEXT("Set System Time Failed! #%d"), iResult);
}
return TRUE;
以上是我的源代码,参考书上的。 然后书上的代码 第二个 不带peek的Recv函数里 改变了 time的值,从3435973836改为36....... 我真是不理解为什么,百思不得其解 。书代码变之后的 日期是对的,而我的值没变 就是19xx年了