⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpsocket.cpp

📁 线程池+socket
💻 CPP
字号:
/************************************************************** * TcpSocket.cpp : implementation file * Copyright 2004-2005 TianMuLingHang * All rights reserved. * Author: Zeng Wenchuan * Date:   Jan 9, 2005 * Modify:  * Date:
 * Email:  zeng_aven@163.com
 * Site:   http://zeng_aven.go.nease.net/ *************************************************************/
 
#include "TcpSocket.h"

CTcpSocket::CTcpSocket() : m_bConnect(false)
{
}

CTcpSocket::~CTcpSocket()
{
}

bool CTcpSocket::Create(int port)
{
	if (CSocketBase::Create(AF_INET, SOCK_STREAM))
		return Bind(port);
	
	return false;
}

bool CTcpSocket::Create()
{
	if (CSocketBase::Create(AF_INET, SOCK_STREAM))
		return Bind();
	
	return false;
}

CTcpSocket *CTcpSocket::Accept()
{
	CTcpSocket *pSocket = new CTcpSocket;
	if (!Accept(pSocket)) {
		delete pSocket;
		pSocket	= NULL;
		return 	NULL;
	}
	
	return pSocket;
}

bool CTcpSocket::Accept(CTcpSocket *pSocket)
{
	assert(pSocket);
	//对方地址
	sockaddr_in	addr;
	int addr_len	= sizeof(addr);
	int	sockfd	= accept(GetSocketId(), (sockaddr* )GetSocketAddr(), (socklen_t *)&addr_len);
	if (sockfd == SOCKET_ERROR) 
		return false;
	pSocket->Attach(sockfd);
	pSocket->SetConnected(addr);
	pSocket->AddAcceptInList();
		
	return true;
}

bool CTcpSocket::Connect(const string sAddr, int port)
{
	struct sockaddr_in 	addr;	//目的地址
	addr.sin_family 	= AF_INET; 
	addr.sin_port 		= htons(0);
	addr.sin_addr.s_addr 	= inet_addr(INADDR_ANY); 
	bzero(&(addr.sin_zero), 8);
	
	return connect(GetSocketId(), (struct sockaddr *)&addr, sizeof(struct sockaddr))
		== 0;
}
	
int CTcpSocket::Send(const void *msg, int len)
{
	if (len <= 0)
		len	= MAXSEND;
		
	return send(GetSocketId(), msg, len, 0);
}

int CTcpSocket::Receive(void *buf, int len)
{
	if (len <= 0)
		len	= MAXRECV;
		
	return recv(GetSocketId(), buf, len, 0);
}

bool CTcpSocket::InitSvrSockets(int port, int nThreadNum/*=0*/)
{
	if (!Create(port)) 
		return false;
	if (!Listen())
		return false;
	int n = 1;
	setsockopt(GetSocketId(), SOL_SOCKET, SO_REUSEADDR, &n, sizeof(int));
		
	if (!nThreadNum)
		return true;
		
	return InitThreadPool(nThreadNum);
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -