Мой класс .h
Код | class Socket { public: Socket(); virtual ~Socket(); public: virtual bool Connect(const char* pHost, int Port); virtual int Send(char *pBuff, int Length); virtual int Recv(char *pBuff, int Length); virtual bool Close();
virtual bool Shutdown();
public: SOCKET* GetHandle() { return &m_Socket; }
const bool& IsInitialized() { return m_IsInitialized; }
protected: bool InitSockaddr(const char *pHostname, int Port); protected: SOCKET m_Socket; int m_Port; struct sockaddr_in m_SockAddr; bool m_IsInitialized; private: void Init(bool toCreate); };
|
.cpp
Код |
Socket::Socket() { ClientIp = NULL; m_IsInitialized = true; if( -1 == (m_Socket = socket( AF_INET, SOCK_STREAM, 0))) m_IsInitialized = false; }
//: default destructor :// Socket::~Socket() { if(!Close()) cout << "Close socket error : " << WSAGetLastError() <<endl; }
//: recv function :// int Socket::Recv(char *buff, int length) { if(!m_IsInitialized) { WSAGetLastError(); return -1; } return recv(m_Socket,buff,length,0); }
//: send function ://
int Socket::Send(char *buff, int length) { if(!m_IsInitialized) { WSAGetLastError(); return -1; } return send(m_Socket,buff,length,0); }
//: connect to ip , port function :// bool Socket::Connect(const char* host, int port) { if(!m_IsInitialized || !InitSockaddr(host,port)) { WSAGetLastError(); return false; } if (connect(m_Socket, (struct sockaddr *)&m_SockAddr, sizeof(m_SockAddr)) < 0) { WSAGetLastError(); return false; } return true; }
//: close socket :// bool Socket::Close() { if(!m_IsInitialized) { WSAGetLastError(); return false; } #ifdef WIN32 if(closesocket(m_Socket)) return false; return true; #elif LINUX close(m_Socket); #endif m_IsInitialized = false; }
//: init struct sockaddr :// bool Socket::InitSockaddr(const char *hostname, int port) { struct hostent *l_pHostinfo; m_SockAddr.sin_family = AF_INET; m_SockAddr.sin_port = htons (port);
if(!hostname) m_SockAddr.sin_addr.s_addr = htonl (INADDR_ANY); else { l_pHostinfo = gethostbyname (hostname); if (l_pHostinfo == NULL) { WSAGetLastError(); return false; } m_SockAddr.sin_addr = *(struct in_addr *) l_pHostinfo->h_addr; } l_pHostinfo =NULL; return true; }
//: function disables sends or receives on a socket :// bool Socket::Shutdown() {
#ifdef WIN32 if(shutdown(m_Socket,0)) { WSAGetLastError(); return false; } return true; #endif #ifdef LINUX if(shutdown(m_Socket,SHUT_RDWR)) { return false; } return true; #endif }
|
|