Login.cpp 连接服务器代码 #include "stdafx.h" #include <windows.h> #include <windowsx.h> #include <winsock2.h> #include "resource.h" #include "Login.h" #pragma comment(lib, "wsock32.lib") #define HIGHTIME 21968699 // 21968708 // Jan 1, 1900 FILETIME.highTime #define LOWTIME 4259332096 // 1604626432 // Jan 1, 1900 FILETIME.lowtime extern SOCKADDR_IN M_addr; WSADATA M_wsaData; extern SOCKET M_sock; hostent* M_host = NULL; extern TCHAR HostName[50]; BOOL WINAPI Login_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Login_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Login_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Login_OnClose); } return FALSE; } BOOL Login_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HICON hIcon = LoadIcon((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE) ,MAKEINTRESOURCE(IDI_ICON)); SendMessage(hwnd, WM_SETICON, TRUE, (LPARAM)hIcon); SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)hIcon); //初始化Socket库 WSAStartup(MAKEWORD(2,0),&M_wsaData); gethostname(HostName,sizeof(HostName)/sizeof(TCHAR)); M_host = gethostbyname(HostName); SetDlgItemText(hwnd,IDC_IPADDRESSIP,inet_ntoa(*(struct in_addr*)(M_host->h_addr))); SetDlgItemText(hwnd,IDC_EDITPORT,TEXT("5566")); SetDlgItemText(hwnd,IDC_IPADDRESSSERVER,TEXT("127.0.0.1")); return TRUE; } void Login_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDOK: { if(ConnectSever(hwnd)) { EndDialog(hwnd, 1); } } break; case IDCANCEL: { EndDialog(hwnd, 0); } break; default: break; } } void Login_OnClose(HWND hwnd) { EndDialog(hwnd, -1); } bool ConnectSever(HWND hwnd) { int count = 0; //标记port冲突的次数,假设超过100次,默认为非端口原因造成无法绑定!!! //创建一根电线 M_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET == M_sock) { MessageBox(hwnd,TEXT("创建套接字失败!"),TEXT("失败"),MB_OK); WSACleanup(); return false; } M_addr.sin_family=AF_INET; //sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //设置电线连接服务器端的端口 TCHAR buff_port[6]; GetDlgItemText(hwnd,IDC_EDITPORT,buff_port,sizeof(buff_port)/sizeof(TCHAR)); M_addr.sin_port = atoi(buff_port); //M_addr.sin_port = htons(IPPORT_TELNET); TCHAR Sever_IP[36]; ZeroMemory(Sever_IP,sizeof(Sever_IP)/sizeof(TCHAR)); GetDlgItemText(hwnd,IDC_IPADDRESSSERVER,Sever_IP,sizeof(Sever_IP)/sizeof(TCHAR)); M_addr.sin_addr.S_un.S_addr = inet_addr(Sever_IP); if(SOCKET_ERROR == connect(M_sock,(SOCKADDR*)&M_addr,sizeof(M_addr))) { MessageBox(hwnd,TEXT("绑定套接字失败,无法启动网络/n检查网络在后再登陆!"), TEXT("网络失败"),MB_OK | MB_ICONSTOP); closesocket(M_sock); //WSACleanup(); return false; } //TCHAR buff_Msg[256