#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
class CSockets
{
private:
SOCKET m_sock;
public:
CSockets();
virtual ~CSockets();
bool Creates( UINT nSocketPort=0,//端口
int nSocketType = SOCK_STREAM,//是TCP还是UDP
LPCTSTR lpszSocketAddress = NULL);//创建的IP地址
bool Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL );
int Send( const void* lpBuf, int nBufLen, int nFlags = 0 );
bool Accept( CSockets& rConnectedSocket,//引用的输出参数用来接收发送的socket
SOCKADDR* lpSockAddr = NULL,//连接的IP地址
int* lpSockAddrLen = NULL);//连接IP地址它的数据大小的地址
bool Connect( LPCTSTR lpszHostAddress, UINT nHostPort );
int Receive( void* lpBuf, int nBufLen, int nFlags = 0 );
int SendTo( const void* lpBuf,//发送字节的大小
int nBufLen,//字节的长度
UINT nHostPort,//端口
LPCTSTR lpszHostAddress = NULL,//要发送的地址
int nFlags = 0 );
bool Getpeername( char* lpSockAddr, UINT& rPeerPort );
bool Getsockname( char * lpSockAddr, UINT& rSocketPort );
SOCKET GetSocketHandle() const
{
return m_sock;
}
bool Listen( int nConnectionBacklog = 5 )
{
if(listen(m_sock,nConnectionBacklog)==-1)
return false;
return true;
}
void close()
{
closesocket (m_sock);
}
static int GetLastError()
{
return WSAGetLastError();
}
};
CSockets::CSockets()
{
WSADATA wd;
WSAStartup(0x0202,&wd);
m_sock=-1;//让套接字=-1
}
CSockets::~CSockets()
{
close();
}
bool CSockets::Creates( UINT nSocketPort ,//端口
int nSocketType ,//是TCP还是UDP
LPCTSTR lpszSocketAddress)//创建的IP地址
{
m_sock=socket(AF_INET,nSocketType,0);
if(m_sock==-1)
return false;
if(Bind(nSocketPort,lpszSocketAddress)==false)
return false;
return true;
}
bool CSockets::Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress)
{
sockaddr_in ad={AF_INET,htons(nSocketPort)};
if(lpszSocketAddress!=NULL)
ad.sin_addr.S_un.S_addr=inet_addr(lpszSocketAddress);
if( bind(m_sock,(sockaddr*)&ad,sizeof(ad))==-1)
return false;
return true;
}
bool CSockets::Accept( CSockets& rConnectedSocket,//引用的输出参数用来接收发送的socket
SOCKADDR* lpSockAddr,//连接的IP地址
int* lpSockAddrLen)//连接IP地址它的数据大小的地址
{
rConnectedSocket.m_sock=accept(m_sock,lpSockAddr,lpSockAddrLen);
if(rConnectedSocket.m_sock==-1)
return false;
return true;
}
int CSockets::Receive( void* lpBuf, int nBufLen, int nFlags)
{
int Count=recv(m_sock,(char*)lpBuf,nBufLen,nFlags);
return Count;
}
int CSockets::Send( const void* lpBuf, int nBufLen, int nFlags)
{
int Count=send(m_sock,(const char*)lpBuf,nBufLen,nFlags);
return Count;
}
int CSockets::SendTo( const void* lpBuf,//发送字节的大小
int nBufLen,//字节的长度
UINT nHostPort,//端口
LPCTSTR lpszHostAddress,//要发送的地址
int nFlags)
{
sockaddr_in ad={AF_INET,htons(nHostPort)};
if(lpszHostAddress!=NULL)
ad.sin_addr.S_un.S_addr=inet_addr(lpszHostAddress);
int Count=sendto(m_sock,(const char*)lpBuf,nBufLen,nFlags,(sockaddr*)&ad,sizeof(ad));
return Count;
}
bool CSockets::Connect( LPCTSTR lpszHostAddress, UINT nHostPort )
{
sockaddr_in ad={AF_INET,htons(nHostPort)};
if(lpszHostAddress!=NULL)
ad.sin_addr.S_un.S_addr=inet_addr(lpszHostAddress);
if(connect(m_sock,(sockaddr*)&ad,sizeof(ad))==-1)
return false;
return true;
}
bool CSockets::Getpeername(char* rPeerAddress, UINT& rPeerPort )
{
sockaddr_in ad={AF_INET};
int len =sizeof(ad);
if(getpeername(m_sock,(sockaddr*)&ad,&len)!=0)
return false;
strcpy(rPeerAddress,inet_ntoa(ad.sin_addr));
rPeerPort=htons(ad.sin_port);
return true;
}
bool CSockets::Getsockname(char* lpSockAddr, UINT& rSocketPort )
{
sockaddr_in ad={AF_INET};
int len=sizeof(ad);
if(getsockname(m_sock,(sockaddr*)&ad,&len)!=0)
return false;
strcpy(lpSockAddr,inet_ntoa(ad.sin_addr));
rSocketPort=htons(ad.sin_port);
return true;
}
#pragma comment (lib,"ws2_32.lib")
class CSockets
{
private:
SOCKET m_sock;
public:
CSockets();
virtual ~CSockets();
bool Creates( UINT nSocketPort=0,//端口
int nSocketType = SOCK_STREAM,//是TCP还是UDP
LPCTSTR lpszSocketAddress = NULL);//创建的IP地址
bool Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL );
int Send( const void* lpBuf, int nBufLen, int nFlags = 0 );
bool Accept( CSockets& rConnectedSocket,//引用的输出参数用来接收发送的socket
SOCKADDR* lpSockAddr = NULL,//连接的IP地址
int* lpSockAddrLen = NULL);//连接IP地址它的数据大小的地址
bool Connect( LPCTSTR lpszHostAddress, UINT nHostPort );
int Receive( void* lpBuf, int nBufLen, int nFlags = 0 );
int SendTo( const void* lpBuf,//发送字节的大小
int nBufLen,//字节的长度
UINT nHostPort,//端口
LPCTSTR lpszHostAddress = NULL,//要发送的地址
int nFlags = 0 );
bool Getpeername( char* lpSockAddr, UINT& rPeerPort );
bool Getsockname( char * lpSockAddr, UINT& rSocketPort );
SOCKET GetSocketHandle() const
{
return m_sock;
}
bool Listen( int nConnectionBacklog = 5 )
{
if(listen(m_sock,nConnectionBacklog)==-1)
return false;
return true;
}
void close()
{
closesocket (m_sock);
}
static int GetLastError()
{
return WSAGetLastError();
}
};
CSockets::CSockets()
{
WSADATA wd;
WSAStartup(0x0202,&wd);
m_sock=-1;//让套接字=-1
}
CSockets::~CSockets()
{
close();
}
bool CSockets::Creates( UINT nSocketPort ,//端口
int nSocketType ,//是TCP还是UDP
LPCTSTR lpszSocketAddress)//创建的IP地址
{
m_sock=socket(AF_INET,nSocketType,0);
if(m_sock==-1)
return false;
if(Bind(nSocketPort,lpszSocketAddress)==false)
return false;
return true;
}
bool CSockets::Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress)
{
sockaddr_in ad={AF_INET,htons(nSocketPort)};
if(lpszSocketAddress!=NULL)
ad.sin_addr.S_un.S_addr=inet_addr(lpszSocketAddress);
if( bind(m_sock,(sockaddr*)&ad,sizeof(ad))==-1)
return false;
return true;
}
bool CSockets::Accept( CSockets& rConnectedSocket,//引用的输出参数用来接收发送的socket
SOCKADDR* lpSockAddr,//连接的IP地址
int* lpSockAddrLen)//连接IP地址它的数据大小的地址
{
rConnectedSocket.m_sock=accept(m_sock,lpSockAddr,lpSockAddrLen);
if(rConnectedSocket.m_sock==-1)
return false;
return true;
}
int CSockets::Receive( void* lpBuf, int nBufLen, int nFlags)
{
int Count=recv(m_sock,(char*)lpBuf,nBufLen,nFlags);
return Count;
}
int CSockets::Send( const void* lpBuf, int nBufLen, int nFlags)
{
int Count=send(m_sock,(const char*)lpBuf,nBufLen,nFlags);
return Count;
}
int CSockets::SendTo( const void* lpBuf,//发送字节的大小
int nBufLen,//字节的长度
UINT nHostPort,//端口
LPCTSTR lpszHostAddress,//要发送的地址
int nFlags)
{
sockaddr_in ad={AF_INET,htons(nHostPort)};
if(lpszHostAddress!=NULL)
ad.sin_addr.S_un.S_addr=inet_addr(lpszHostAddress);
int Count=sendto(m_sock,(const char*)lpBuf,nBufLen,nFlags,(sockaddr*)&ad,sizeof(ad));
return Count;
}
bool CSockets::Connect( LPCTSTR lpszHostAddress, UINT nHostPort )
{
sockaddr_in ad={AF_INET,htons(nHostPort)};
if(lpszHostAddress!=NULL)
ad.sin_addr.S_un.S_addr=inet_addr(lpszHostAddress);
if(connect(m_sock,(sockaddr*)&ad,sizeof(ad))==-1)
return false;
return true;
}
bool CSockets::Getpeername(char* rPeerAddress, UINT& rPeerPort )
{
sockaddr_in ad={AF_INET};
int len =sizeof(ad);
if(getpeername(m_sock,(sockaddr*)&ad,&len)!=0)
return false;
strcpy(rPeerAddress,inet_ntoa(ad.sin_addr));
rPeerPort=htons(ad.sin_port);
return true;
}
bool CSockets::Getsockname(char* lpSockAddr, UINT& rSocketPort )
{
sockaddr_in ad={AF_INET};
int len=sizeof(ad);
if(getsockname(m_sock,(sockaddr*)&ad,&len)!=0)
return false;
strcpy(lpSockAddr,inet_ntoa(ad.sin_addr));
rSocketPort=htons(ad.sin_port);
return true;
}