您的位置:首页 > 其它

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

2011-08-11 17:51 330 查看
/*------------------------------------
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----*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: