自己写的一个同步SOCKET通信类 相当实用

/*------------------------------------
Author:   Ted--Nefarian Zhu
Date:     2011/08/11 11:30
Version:  V1.03 All rights reserved !
QQ:       nefarian_zhu@qq.com
------------------------------------*/
#ifndef CSOCKET_H
#define CSOCKET_H
#include <iostream>
#include <windows.h>

class CSocket
{
private:
     /*---Member Variables---*/
     SOCKET m_socket;
     struct sockaddr_in m_addr; 
    
public:        
     /*---Member Fuctions---*/     
     CSocket();
     ~CSocket();
     static BOOL InitLib();  
     static BOOL UnInitLib();  
     BOOL InitSock();    
     BOOL InitSock(const char* constIP,int EndPort);
     BOOL Bind();   
     BOOL Listen();
     BOOL Accept(CSocket &tsocket); 
     BOOL Connect();             
     int  Send(const char* buff,int buffSize);  
     int  Recv(char* buff,int buffSize); 
     BOOL Close();    
};
 
             
CSocket::CSocket()
{
    memset(&m_addr, 0, sizeof(m_addr)); 
    m_socket = INVALID_SOCKET;        
}


CSocket::~CSocket()
{ 
    this->Close();
}


BOOL CSocket::InitLib()
{
    WSADATA ws;
    if (WSAStartup(MAKEWORD(2,2),&ws) != 0)
    {
        return FALSE;
    }
    else
    {  
        return TRUE;
    }
}


BOOL CSocket::UnInitLib()
{ 
    WSACleanup();
}


BOOL CSocket::InitSock()
{
    m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
    char szHostName[128] = "";
    gethostname(szHostName, 128);
    hostent* pHost = gethostbyname(szHostName);
    
    m_addr.sin_addr.s_addr = (*(IN_ADDR*)pHost->h_addr_list[0]).s_addr;
    m_addr.sin_port = htons(8608);     
    m_addr.sin_family = AF_INET; 
    
    return TRUE;    
}


BOOL CSocket::InitSock(const char* constIP,int EndPort)
{
    m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    
    m_addr.sin_addr.s_addr = inet_addr(constIP);
    m_addr.sin_port = htons(EndPort);     
    m_addr.sin_family = AF_INET; 
    
    return TRUE;  
}


BOOL CSocket::Bind()
{
    int result = bind(m_socket, (struct sockaddr*)&m_addr,
                 sizeof(m_addr));   
    if (result == 0) 
    {
         return TRUE;
    }
    else
    { 
         return FALSE; 
    }
}


BOOL CSocket::Listen()
{
    int result = listen(m_socket, 10);
    
    if (result == 0) 
    {
        return TRUE;
    }
    else
    { 
        return FALSE;
    }
}


BOOL CSocket::Accept(CSocket &tsocket)
{
    int len = sizeof(m_addr);
    tsocket.m_socket = accept(m_socket,(struct sockaddr*)&m_addr,&len);
    
    if (tsocket.m_socket == INVALID_SOCKET) 
    {
        return FALSE;
    }
    else 
    {
        return TRUE;
    }
}


BOOL CSocket::Connect()
{
    int result = connect(m_socket,(sockaddr*)&m_addr,sizeof(m_addr));
    
    if (result == 0) 
    {
        return TRUE;
    }
    else 
    {
        return FALSE;
    }
}


int CSocket::Send(const char* buff,int buffSize)
{
    int bytes = send(m_socket,buff,buffSize,0);
	return bytes;
}


int CSocket::Recv(char* buff,int buffSize)
{    
    int bytes = recv(m_socket,buff,buffSize,0);
    return bytes;   
}


BOOL CSocket::Close()
{
    if (shutdown(m_socket, 2)) return FALSE;
    if (closesocket(m_socket)) return FALSE;
    return TRUE;
}             


#endif		/*----CSOCKET_H----*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值