/*------------------------------------
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----*/
自己写的一个同步SOCKET通信类 相当实用
最新推荐文章于 2023-09-20 20:50:15 发布