扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:刘涛 来源:天极软件 2007年10月16日
关键字:
////////////////////////////////////////////// #include <windows.h> #include "resource.h" #include "CConnection.h" extern HWND hWndDialog; // used to pass the handle of the dialog the main.cpp extern CConnection* Connection; extern CNetworking Networking; #define CONNECT_PORT 10205 void ReceiveCallback (DWORD ptr); void CloseCallback (DWORD ptr); void AcceptCallback (DWORD ptr); BOOL CALLBACK SendString( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); BOOL CALLBACK SendFile( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); BOOL CALLBACK ConnectToIP( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); //////////////////////////////////////////////////////mian.cpp #include "main.h" #define MAX_LOADSTRING 100 HINSTANCE hInst; // current instance HWND hWnd, hWndDialog; // handle of the dialog TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text CNetworking Networking; CConnection* Connection = NULL; int connections[8]; // holds our connection slots... // Foward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void ReceiveCallback (DWORD ptr) { char buff[1024] = ""; CConnection* c = reinterpret_cast <CConnection*> (ptr); c->Receive (buff, 1024); MessageBox (hWnd, buff, "Information", MB_OK | MB_ICONINFORMATION); } void CloseCallback (DWORD ptr) { MessageBox (hWnd, "The connection was closed.", "Information", MB_OK | MB_ICONINFORMATION); } void AcceptCallback (DWORD ptr) { char cip[15]; unsigned int cp = 0; CNetworking* net = reinterpret_cast <CNetworking*> (ptr); if (Connection && Connection->IsConnected ()) { CConnection* c = net->GetAccepted (); while (c) { char nocon[] = "The host can not accept your connection at this time."; c->Send (nocon, sizeof (nocon)); c->Disconnect (); delete c; c = net->GetAccepted (); }; } else { if (Connection) delete Connection; Connection = net->GetAccepted (); Connection->PeerInfo (&cip[0], 15, &cp); Connection->SetReceiveFunc (ReceiveCallback); Connection->SetCloseFunc (CloseCallback); char ci[128]; sprintf (ci, "A connection was accepted.\n\nClient Information:\n %s:%i\n\n", cip, cp); MessageBox (hWnd, ci, "Client Info", MB_OK | MB_ICONINFORMATION); } } int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { // TODO: Place code here. MSG msg; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDS_NETWORKING, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_NETWORKING); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW); wcex.lpszMenuName = (LPCSTR)IDM_NETWORKING; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex); } BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch (message) { case WM_CREATE: { hWndDialog = NULL; SetWindowPos (hWnd, HWND_TOP, 0, 0, 200, 44, SWP_NOOWNERZORDER | SWP_NOMOVE); char jakobIP[225] = ""; Networking.GetLocalIPs (jakobIP, 225); MessageBox(NULL, jakobIP, "Info", NULL); Networking.SetAcceptFunc (AcceptCallback); break; } case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_EXIT: DestroyWindow (hWnd); break; case IDM_LISTEN: if (Connection) { if (MessageBox (hWnd, "You are still connected to a computer.\nPress Yes if you want to disconnect and No to abort.\n\nSince this is just a demonstration of what you can\ndo with Networking I kept things simple.", NULL, MB_YESNO | MB_ICONSTOP) == IDNO) break; delete Connection; Connection = NULL; } if (!Networking.Listen (CONNECT_PORT)) { char cPort[1024] = ""; sprintf (cPort, "Unable to listen at port %i", CONNECT_PORT); MessageBox (hWnd, cPort, NULL, MB_OK | MB_ICONSTOP); } else { char cPort[1024] = ""; sprintf (cPort, "Now listening at port %i!\nPress 'Ok' to accept incoming connections.", CONNECT_PORT); MessageBox (hWnd, cPort, "Listening", MB_OK | MB_ICONINFORMATION); } break; case IDM_CANCELLISTEN: if (Networking.IsListening ()) Networking.StopListen (); else MessageBox (hWnd, "Unable to cancel listen-process!\nMake sure you are listening.", NULL, MB_OK | MB_ICONINFORMATION); break; case IDM_CONNECT: { if (Connection) { Connection->Disconnect (); } DialogBox (hInst, "CONNECTIP", hWnd, ConnectToIP); break; } case IDM_SENDMSG: if (!Connection) MessageBox(hWnd, "Please connect before sending data.", NULL, MB_OK | MB_ICONINFORMATION); else DialogBox(hInst, "SENDMSG", hWnd, SendString); break; case IDM_DISCONNECT: if (Connection) Connection->Disconnect (); else MessageBox (hWnd, "Unable to close connection!\nMake sure you are connected.", NULL, MB_OK | MB_ICONINFORMATION); break; case IDM_LISTLAN: { char lanlist[1024] = ""; Networking.GetNeighborhood (lanlist, 1024); MessageBox (hWnd, lanlist, "Information", MB_OK | MB_ICONINFORMATION); } default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc (hWnd, message, wParam, lParam); } return 0; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者