⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket.hpp

📁 一个普通的mount工具,能过CIFS协议来挂载盘符
💻 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 + -