Network programming exercises 3

xiaoxiao2021-03-06  50

No connection socket timing: server client socket () socket () bind () bind () readfrom () blocking waiting customer sendto () handle () Close () r () Close () Close ()

/ ************************************************** ******* 2004 12 7 Stephen ******************************************************** ***************** / # include #pragma comment (lib, "wsock32.lib")

#define maxSize 50

#define WM_RecEiVedata WM_USER 1002

CRASS CNETSERVER {PUBLIC: CNETSERVER (); CNETSERVER (INT port); ~ CNETSERVER (); Inline Void SetWnd (hwnd hwnd) {this-> m_hwnd = hwnd;} // BOOL INITNETSERVER ();

STATIC DWORD WINAPI Thread Server (LPVOID N); Bool Sendmsg (Char * Data, INT LEN, CHAR * HOST, INT Port); char * getLastError (); private: Wsadata Wsdata; hwnd m_hwnd; handle m_hthread;

SOCKET LISTENSOCKET; SOCKADDR_IN SERVADDR; SOCKADDR_IN ClientAddr; Int Port

Char Szerror [1024]; CHAR SZBUFF [1024];

CNetServer :: CNetServer () {m_hwnd = null; listensocket = invalid_socket; if (WsaStartup (MakeTartup (MakeTartup (Makeword (1), & WSDATA)! = 0) {WSPrintf (this-> szerror, text ("WSAStartup failed.Error:% D "), Wsagetlasterror ());} port = 9999; MEMSET (SZBUFF, 0, SIZEOF (SZBUFF));} CNETSERVER :: CNetServer (int port) {m_hwnd = null; listensocket = invalid_socket; if (WsaStartup (MakeWord (1 , 1), & WSDATA)! = 0) {WSPRINTF (this-> Szerror, Text ("WsaStartup Failed.Error:% D"), wsagetlasterror ());} this-> port = port;} CNetServer :: ~ CNetServer () {if (listenSocket = INVALID_SOCKET!) closesocket (listenSocket); WSACleanup ();} char * CNetServer :: getLastError () {return this-> szError;} bool CNetServer :: InitNetServer () {listenSocket = socket (AF_INET, SOCK_DGRAM, 0); if (listensocket == invalid_socket) {WSPrintf (this-> szerror, text ("socket failed.error:% D"), wsagetlasterror (); return false;} servaddr.sin_family = AF_INET; servaddr. SIN_ADDR.S_ADDR = HTONL (INADDR_Any); servaddr.sin_port = htons (port); if (Bind (ListenSocket, (Struct SockAddr *) & Servaddr, Sizeof (servaddr))! = 0) {WSPrintf (this-> szerror, text ("bind failed.error:% d"), wsagetlasterror ()); return false;} m_hthread = CREATTHREAD (Null, 0, CNetServer :: Thread Server , 0, null; return true;} DWORD WINAPI CNETSERVER :: ThreadServer (lpvoid n) {CNetServer * pserver = (cnetServer *) n; int Len = Sizeof (PServer-> ClientAddr); int RCV = 1; char buff [1024]; MEMSET (BUFF, 0, SIZEOF (BUFF)); While (RCV) {RCV = Recvfrom (PServer-> Listensocket, Buff, Sizeof (BUFF) -1, 0, (Struct SockAddr *) & pserver-> clientaddr, (int *) & len); if (RCV ==

Socket_ERROR) {WSPrintf (PServer-> Szerror, Text ("Recvfrom Failed.Error:% D"), wsagetlasterror ()); return -1;} if (rcv> 0) {WSPRINTF (pserver-> szbuff, text (" Host:% s, port:% i, msg:% s "), INET_NTOA (PServer-> clientaddr.sin_addr), NTOHS (PServer-> ClientDr.sin_Port), BUFF); // :: SendMessage (pserver-> m_hwnd , WM_RecEiveData, 0, (LPARAM) PServer-> Buff); MessageBox (Null, PServer-> SZBuff, "getData", 0);}} return 0L;} Bool CNetServer :: Sendmsg (char * data, int Len, char * Host, int port; hostent * hostdata; if (atoi (host)) {long ip = inet_addr (host); hostdata = gethostbyaddr ((char *) & ip, sizeof (ip), af_inet);} else {HostData = gethostByname (Host);} if (! HostData) {WSPrintf (this-> Szerror, Text ("Host Can not be null"); returnaddr_in dest; dest.sin_family = AF_INET; DEST.SIN_ADDR = * (in_addr *) (HostData-> h_addr_list [0]); dest.sin_port = HTONS (port);

Sent = Sendto (this-> listensocket, data, len, 0, (sockaddr *) & dest, sizeof (dest)); if (Sent! = LEN) {WSPrintf (this-> szerror, Text ("Sendto Msg Failed.error :% d "), wsagetlasterror ()); return false;} return true;} / *************************************** ***************************************** Test *********** TEST ******** *********************************************************** ***************** / INT _TMAIN (int Argc, _tchar * argv []) {CNetServer Net; if (Net.initnetServer () == false) cout << Net. Getlasterror () << endl; char send [1024]; char host [32]; while (1) {cin >> Send; if (Stricmp (SEND, ") == 0) Break; CIN >> Host; Net.sendmsg (Send, Strlen (Send), Host, 9999);

}

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

New Post(0)