📄 socket.hpp
字号:
#ifndef WindowsSocket_H_
#define WindowsSocket_H_
#include <listtmp.h>
#include <crit_sec.h>
#ifndef WINNT
class ClWinSocketApplication
{
public:
class XFailedToBegin {};
ClWinSocketApplication()
{
WSADATA wsaData;
if ( ::WSAStartup(0x101,&wsaData) == SOCKET_ERROR )
{
throw XFailedToBegin();
}
}
~ClWinSocketApplication()
{
::WSACleanup();
}
};
#endif
class ClWinSocket
{
protected:
SOCKET m_Socket;
public:
class XFailedToCreate {};
ClWinSocket() : m_Socket( INVALID_SOCKET ) {}
ClWinSocket( SOCKET Socket ) : m_Socket( Socket ) {}
operator SOCKET() const { return m_Socket; }
void operator = ( SOCKET Socket ) { m_Socket = Socket; }
};
class ClServerSocket : public ClWinSocket
{
public:
struct St_Connection
{
ClServerSocket * m_pServer;
HANDLE m_hThread;
DWORD m_dwThread;
ClWinSocket m_Client;
};
ClServerSocket( const char * szServerIP, int nPort );
~ClServerSocket();
int Do(void);
protected:
ST_ListContainer<St_Connection> m_lstConnections;
ClCriticalSection m_ConnectionsLock;
protected:
virtual void OnConnect( SOCKET Connection ) = 0;
void AddConnection( St_Connection * pstConnection );
BOOL RemoveConnection( ClWinSocket Connection );
BOOL QueryConnection( ClWinSocket Connection, St_Connection & );
static DWORD WINAPI ConnectionThread( PVOID );
};
class ClClientSocket : public ClWinSocket
{
public:
ClClientSocket();
BOOL isCreated()
{
return m_Socket >= 0;
}
~ClClientSocket();
BOOL connect( const char * szServerIP, int nPort );
BOOL connect( struct sockaddr_in SocketAddr, int nPort );
};
namespace namWinSocket
{
BOOL GetSocketAddress( LPCSTR szIPAddress, struct sockaddr_in & SocketAddress );
BOOL ReceiveStream( SOCKET Socket, PVOID pBuffer, size_t n );
BOOL SendStream( SOCKET Socket, PVOID pBuffer, size_t n );
}; // namespace WinSocket
#endif // WindowsSocket_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -