Network programming exercises 1

xiaoxiao2021-03-06  52

It is written here that a client class is written. When the initnetClient is successfully connected, the server is connected, and the received data returns the window. After other functions, add it ./************************************** ************************************************************************************************************************************************************************************************************************************************* 2004 - 11 - 30 Refer to MSDN Stephen ***************************************************************************** ***************** / #include #pragma Comment (lib, "ws2_32.lib") #define WM_READDATA WM_USER 1001 CLASS CNETCLIENT {public: CNetClient char * hostname, int iport); ~ CNetClient (); inline void SethWnd (HWND hwnd) {m_hWnd = hwnd;} bool InitNetClient (); bool ConnectToServer (); bool SendDataToServer (char * data, int len); char * GetLastError (); static DWORD WINAPI ThreadToRead (LPVOID n); private: char hostName [256]; int port; char szError [256]; char getData [256]; int nReceive; SOCKET serverSocket; SOCKADDR_IN destination; pHOSTENT pHostent; WSADATA wsData; HANDLE hreadthread; HWND m_hWnd;}; CNetClient :: CNetClient (char * hostname, int iport) {serverSocket = INVALID_SOCKET; pHostent = NULL; strcpy (hostName, hostname); port = iport; hreadthread = NULL; nReceive = 0;} / / Turn off the network CNETCLIENT :: ~ CNetClient () {DWORD exitCode = 0; if (hreadthread = NULL!) {GetExitCodeThread (hreadthread, & exitCode); ExitThread (exitCode);} if (! ServerSocket = INVALID_SOCKET) closesocket (serverSocket); WSACleanup ();} // Initialization Client Bool CNetClient :: initnetclient () {IF (WsaStartup (MakeWord (1, 1), & this-> WSDATA)! = 0) {WSPRINTF (this-> szerror, text ("WsaStartup Failed.Error:% D") Wsagetlasterror ()); Return False;} IF ((Serversocket = Socket (AF_INET, SOCK_STREAM, 0)) == Invalid_socket) {WSPrintf (this-> szerror, text ("socket failed.error:% D"), Wsagetlasterror ()); Return False;} destination.sin_family = af_inet; if ((phostent = gethostbyname (hostname) =

= NULL) {WSPrintf (this-> szerror, text ("gethostbyname failed.error:% d"), wsagetlasterror (); clossockt (serversocket); return false;} Memcpy (Destination.sin_Addr ), phostent-> h_legth; destination.sin_port = htons (port); return true;} // Connect server BOOL CNETCLIENT :: ConnectTOSERVER () {IF (serversocket == invalid_socket) Return False; IF connect (serverSocket, (PSOCKADDR) & destination, sizeof (destination)) == SOCKET_ERROR) {wsprintf (this-> szError, TEXT ( "connect failed.Error:% d"), WSAGetLastError ()); closesocket (serverSocket); return false;} hreadthread = CreateThread (Null, 0, CNetClient :: Threadtoread, this, 0, null); return true;} // Send Data BOOL CNETCLIENT :: SendDatatoserver (CHAR * DATA, INT LEN) {if (ServerSocket == INVALID_SOCKET) RETURN FALSE; IF (Send (Serversocket, Data, Len, 0) == Socket_ERROR) {WSPrintf (this-> szerror, text ("send failed.error:% D"), wsagetlasterror ()); CloseSocket (Serversocket Return false;} return true;} // Return Error message char * CNETCLIENT: : GetLastError () {return this-> szerror;} // Read data thread DWord WinAPI CNetClient :: threadtoread (lpvoid n) {CNETCLIENT * PNETCLIENT = (CNetClient *) n; while (1) {pnetClient-> nReceive = Recv (PNETCLIENT-> Serversocket, PnetClient-> getData, sizeof (pnetClient-> getdata), 0); if (pnetClient-> nReceive == Socket_ERROR) {WSPrintf (pnetclient-> szerror, text ("RECV FAILED.Error:% D "), wsagetlasterror ()); CloseSocket (PNETClient-> ServerSocket); Break;} else if (pnetClient-> NReceive == 0) {WSPrintf (PNETClient-> Szerror, Text (" Finished Receiving Data "); CloseSocket (pnetClient-> serversocket);

转载请注明原文地址:https://www.9cbs.com/read-83870.html

New Post(0)