SocMFC.h
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:5k
源码类别:

CA认证

开发平台:

Visual C++

  1. /*
  2. Module : SocMFC.H
  3. Purpose: Interface for an MFC wrapper class for sockets
  4. Created: PJN / 05-08-1998
  5. Copyright (c) 2002 - 2005 by PJ Naughter.  (Web: www.naughter.com, Email: pjna@naughter.com)
  6. All rights reserved.
  7. Copyright / Usage Details:
  8. You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) 
  9. when your product is released in binary form. You are allowed to modify the source code in any way you want 
  10. except you cannot modify the copyright details at the top of each module. If you want to distribute source 
  11. code with your application, then you are only allowed to distribute versions released by the author. This is 
  12. to maintain a single distribution point for the source code. 
  13. */
  14. /////////////////////////////// Defines ///////////////////////////////////////
  15. #ifndef __SOCMFC_H__
  16. #define __SOCMFC_H__
  17. #ifndef SOCKMFC_EXT_CLASS
  18. #define SOCKMFC_EXT_CLASS
  19. #endif
  20. ////////////////////////////// Includes ///////////////////////////////////////
  21. #ifndef _WINSOCKAPI_
  22. #pragma message("You need to add Winsock support to your PCH (normally stdafx.h), Use either afxsock.h, winsock.h or Winsock2.h")
  23. #endif
  24. ////////////////////////////// Classes ////////////////////////////////////////
  25. void AfxThrowWSocketException(int nError = 0);
  26. class SOCKMFC_EXT_CLASS CWSocketException : public CException
  27. {
  28. public:
  29. //Constructors / Destructors
  30. CWSocketException(int nError);
  31. ~CWSocketException();
  32. //Methods
  33. #ifdef _DEBUG
  34. virtual void Dump(CDumpContext& dc) const;
  35. #endif
  36. virtual BOOL GetErrorMessage(LPTSTR lpstrError, UINT nMaxError, PUINT pnHelpContext = NULL);
  37. CString GetErrorMessage();
  38. //Data members
  39. int m_nError;
  40. protected:
  41. DECLARE_DYNAMIC(CWSocketException)
  42. };
  43. class SOCKMFC_EXT_CLASS CWSocket
  44. {
  45. public:
  46. //Constructors / Destructors
  47.   CWSocket();
  48.   virtual ~CWSocket();
  49. //Attributes
  50.   void    Attach(SOCKET hSocket);
  51.   SOCKET  Detach(); 
  52.   void    GetPeerName(CString& sPeerAddress, UINT& nPeerPort);
  53.   void    GetPeerName(SOCKADDR* lpSockAddr, int* lpSockAddrLen);
  54.   void    GetSockName(CString& sSocketAddress, UINT& nSocketPort);
  55.   void    GetSockName(SOCKADDR* lpSockAddr, int* lpSockAddrLen);
  56.   void    SetSockOpt(int nOptionName, const void* lpOptionValue, int nOptionLen, int nLevel = SOL_SOCKET);
  57.   void    GetSockOpt(int nOptionName, void* lpOptionValue, int* lpOptionLen, int nLevel = SOL_SOCKET);
  58.   BOOL    IsCreated() const; 
  59.   BOOL    IsReadible(DWORD dwTimeout);
  60.   BOOL    IsWritable(DWORD dwTimeout);
  61. //Methods
  62.   void    Create(BOOL bUDP = FALSE);
  63.   void    Create(int nSocketType, int nProtocolType, int nAddressFormat);
  64.   void    Accept(CWSocket& connectedSocket, sockaddr_in& clientAddress);
  65.   void    Bind(UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL);
  66.   void    Bind(const SOCKADDR* lpSockAddr, int nSockAddrLen);
  67.   void    Close();
  68.   void    Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen);
  69.   void    Connect(LPCTSTR lpszHostAddress, UINT nHostPort);
  70. #ifdef _WINSOCK2API_ //Connect methods which have a timeout parameter are only provided if we are using WinSock2
  71.                      //because we are making use of Winsock2 functionality such as WSAEventSelect
  72.   void    Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen, DWORD dwConnectionTimeout, BOOL bResetToBlockingMode = TRUE);
  73.   void    Connect(LPCTSTR lpszHostAddress, UINT nHostPort, DWORD dwConnectionTimeout, BOOL bResetToBlockingMode = TRUE);
  74. #endif
  75.   void    ConnectViaSocks4(LPCTSTR lpszHostAddress, UINT nHostPort, LPCTSTR lpszSocksServer, UINT nSocksPort, DWORD dwConnectionTimeout = 5000);
  76.   void    ConnectViaSocks5(LPCTSTR lpszHostAddress, UINT nHostPort, LPCTSTR lpszSocksServer, UINT nSocksPort, LPCTSTR lpszUserName = NULL, LPCTSTR lpszPassword = NULL, DWORD dwConnectionTimeout = 5000, BOOL bUDP = FALSE);
  77.   void    ConnectViaHTTPProxy(LPCTSTR lpszHostAddress, UINT nHostPort, LPCTSTR lpszHTTPServer, UINT nHTTPProxyPort, CString& sProxyResponse, LPCTSTR lpszUserName = NULL, LPCTSTR pszPassword = NULL, DWORD dwConnectionTimeout = 5000, LPCTSTR lpszUserAgent = NULL);
  78.   void    IOCtl(long lCommand, DWORD* lpArgument);
  79.   void    Listen(int nConnectionBacklog = SOMAXCONN);
  80.   int     Receive(void* lpBuf, int nBufLen, int nFlags = 0);
  81.   int     ReceiveFrom(void* lpBuf, int nBufLen, SOCKADDR* lpSockAddr, int* lpSockAddrLen, int nFlags = 0);
  82.   int     ReceiveFrom(void* lpBuf, int nBufLen, CString& sSocketAddress, UINT& nSocketPort, int nFlags = 0);
  83.   void    Send(const void* pBuffer, int nBufLen, int nFlags = 0);
  84.   int     SendTo(const void* lpBuf, int nBufLen, const SOCKADDR* lpSockAddr, int nSockAddrLen, int nFlags = 0);
  85.   int     SendTo(const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0);
  86. enum { receives = 0, sends = 1, both = 2 };
  87.   void    ShutDown(int nHow = sends);
  88. //Operators
  89.   operator SOCKET();
  90. protected:
  91. //Methods
  92.   void ReadHTTPProxyResponse(DWORD dwTimeout, CString& sResponse);
  93.   void ReadSocks5ConnectReply(DWORD dwTimeout);
  94. //Member variables
  95.   SOCKET m_hSocket;
  96. };
  97. #endif //__SOCMFC_H__