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;}
阅读全文
0 0
- CSocket封装类
- CSocket 是如何被封装的
- MFC的Csocket类
- CSocket类编程模型
- 方法三:CSocket类
- CSocket类介绍
- CSocket类及其开发
- CSocket 和CAsyncSocket类
- CSocket类编程模型
- 方法三:CSocket类
- CSockets类重写CSocket
- CSocket 类 not for MFC
- CSocket 和CAsyncSocket类介绍
- CSocket 和CAsyncSocket类介绍
- CSocket 和CAsyncSocket类介绍
- CSocket 和CAsyncSocket类介绍
- CSocket 和CAsyncSocket类介绍
- MFC CSocket类 通信原理
- springBoot基础系列--properties配置
- vj水题
- static修饰符
- 语义网基础知识
- Oracle数据库事务隔离级别
- CSocket封装类
- stack and unstack
- eclipse和Myeclipse的编码格式设置
- 理解Docker容器网络之Linux Network Namespace
- midtorder/preorder/postorder
- ubuntu搭建shadowsocks服务,并且win7电脑访问
- leetcode-100. Same Tree
- 171127 #codeforces# check_for_three
- java不支持多继承支持多接口的原因