CSocket封装类

来源:互联网 发布:自动股票交易软件 编辑:程序博客网 时间:2024/05/16 13:48

作者:吕鑫

// SockLx.h: interface for the CSockLx class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_SOCKLX_H__7ED0915D_BA01_4118_9C96_33892D00FAA1__INCLUDED_)#define AFX_SOCKLX_H__7ED0915D_BA01_4118_9C96_33892D00FAA1__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include <winsock2.h>class CSockLx  {SOCKET m_hSocket;public:BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM , LPCTSTR lpszSocketAddress = NULL );BOOL Accept( CSockLx& rConnectedSocket,  LPSTR szIP = NULL,UINT *nPort = NULL);BOOL Connect( LPCTSTR lpszHostAddress, UINT nHostPort );int SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCSTR lpszHostAddress = NULL, int nFlags = 0 );int ReceiveFrom( void* lpBuf, int nBufLen, char *rSocketAddress, UINT& rSocketPort, int nFlags = 0 );BOOL Listen( int nConnectionBacklog = 5 ){return !listen(m_hSocket,nConnectionBacklog);}int Send( const void* lpBuf, int nBufLen, int nFlags = 0 ){return send(m_hSocket, (LPCSTR)lpBuf, nBufLen, nFlags);}int Receive( void* lpBuf, int nBufLen, int nFlags = 0 ){return recv(m_hSocket, (LPSTR)lpBuf, nBufLen, nFlags);}void Close( ){closesocket(m_hSocket);m_hSocket = INVALID_SOCKET;}BOOL GetSockName( char*  rSocketAddress, UINT& rSocketPort );BOOL GetPeerName(  char* rPeerAddress, UINT& rPeerPort );BOOL Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL );CSockLx();virtual ~CSockLx();};#endif // !defined(AFX_SOCKLX_H__7ED0915D_BA01_4118_9C96_33892D00FAA1__INCLUDED_)

// SockLx.cpp: implementation of the CSockLx class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "SockLx.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////#pragma comment(lib,"ws2_32.lib")CSockLx::CSockLx(){static int i = 0;if(!i){i=1;WSADATA wd;WSAStartup(0x0202,&wd);}m_hSocket = INVALID_SOCKET;}CSockLx::~CSockLx(){Close();}//#define s_addr  S_un.S_addrBOOL CSockLx::Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress  ){sockaddr_in sa={AF_INET,htons(nSocketPort)};if(lpszSocketAddress)sa.sin_addr.s_addr = inet_addr(lpszSocketAddress);return !bind(m_hSocket,(sockaddr*)&sa,sizeof(sa));}BOOL CSockLx::Create( UINT nSocketPort, int nSocketType , LPCTSTR lpszSocketAddress  ){m_hSocket = socket(AF_INET,nSocketType,0);if(INVALID_SOCKET==m_hSocket)return FALSE;return Bind(nSocketPort,lpszSocketAddress);}BOOL CSockLx::Accept( CSockLx& rConnectedSocket,  LPSTR szIP ,UINT *nPort ){sockaddr_in sa ;  int len = sizeof(sa);rConnectedSocket.m_hSocket = accept(m_hSocket,(sockaddr*)&sa,&len);if(INVALID_SOCKET == rConnectedSocket.m_hSocket )return FALSE;if(szIP)strcpy(szIP,inet_ntoa(sa.sin_addr));if(nPort)*nPort = htons(sa.sin_port);return TRUE;}BOOL CSockLx::Connect( LPCTSTR lpszHostAddress, UINT nHostPort ){sockaddr_in sa={AF_INET,htons(nHostPort)};sa.sin_addr.s_addr = inet_addr(lpszHostAddress);return !connect(m_hSocket,(sockaddr*)&sa,sizeof(sa));}int CSockLx::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort,LPCSTR lpszHostAddress , int nFlags ){sockaddr_in sa={AF_INET,htons(nHostPort)};sa.sin_addr.s_addr = inet_addr(lpszHostAddress);return sendto(m_hSocket,(const char*)lpBuf,nBufLen,0,(sockaddr*)&sa,sizeof(sa));}BOOL CSockLx::GetSockName( char*  rSocketAddress, UINT& rSocketPort ){sockaddr_in sa ;  int len = sizeof(sa);if(getsockname(m_hSocket,(sockaddr*)&sa,&len))return FALSE;rSocketPort = htons(sa.sin_port);strcpy(rSocketAddress,inet_ntoa(sa.sin_addr));return TRUE;}BOOL CSockLx::GetPeerName(  char* rPeerAddress, UINT& rPeerPort ){sockaddr_in sa ;  int len = sizeof(sa);if(getpeername(m_hSocket,(sockaddr*)&sa,&len))return FALSE;rPeerPort = htons(sa.sin_port);strcpy(rPeerAddress,inet_ntoa(sa.sin_addr));return TRUE;}


原创粉丝点击