Network programming exercises 1

xiaoxiao2021-03-06  63

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;} // Close network CNetClient :: ~ CNetClient () {DWORD exitCode = 0; if (hreadthread = NULL!) {GetExitCodeThread (hreadthread, & exitCode); ExitThread (exitCode);} if (! serverSocket = INVALID_SOCKET) closesocket (serverSocket); WSACleanup ();

} // Initialize the client BOOL CNETCLIENT :: initnetclient () {ix (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) == null) {wsprintf (this-> szerror, text ("gethostbyname failed.error:% d"), wsagetlasterror (); clossoSocket; Return False;} memcpy (CHAR FAR *) & (Destination.sin_ADDR), phostent-> h_addr, phostent-> h_length; destination.sin_port = HTONS (port);

return true;} // server connected 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; Return False; HREADTHREAD = CREATTHREAD (Null, 0, CNetClient :: Threadtoread, this, 0, null) Return true;} // Send data BOOL CNETCLIENT:: SendDataTOCVER (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; 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; Break;} Else {// Test Block SendMessage // :: SendMessage (pnetClient-> m_hwnd, wm_readdata, 0, (lparam) pnetclient-> getdata); MessageBox (null, (lpctstr) PNETCLIENT-> GetData, "getData", 0);}

} / ******************************************************* ************************************** Test ************ *********************************************************** ************************************** / INT _TMAIN (int Arg, _tchar * argv []) {cout << "--- ---------- Socket ------------------ "<< Endl; char send [] =" user "; cnetClient netclient (" ftp.27h .com ", 21); if (NetClient.initnetClient () == false) cout << NetClient.getLastError () << endl; if (NetClient.ConnectTOSERVER () == false) cout << NetClient.getlasterror () <

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

New Post(0)