C++网络编程学习笔记(二)——服务端编程封装
将上一篇的代码封装为一个类
ps:记得关闭两次socket,一个自己,一个连接过来的客户端
头文件"TcpConnect.h"
#pragma once
//因为操作繁琐,且和系统相关内容过多,对其进行封装
//初始化库,1.要么加一个函数初始化,要么在构造函数中做
#include<string>
class TcpConnect
{
public:
int sock = 0;
unsigned short port = 0;
std::string ip;
public:
TcpConnect();
virtual ~TcpConnect();
int CreatSocket();
bool Bind(unsigned short port);
//简化版本,如果想设置listen队列数量和IP地址可以重载,包含了bind和listen
TcpConnect Accept();
//注意返回的不是指针,是对象,所以不能在析构函数里释放,否则返回一次释放一次
//12min重听
//每进来一个连接,都返回该对象,判断client==0为失败
void Close();
//释放掉对象,否则socket会太多
int Recv(char* buf, int bufsize);
int Send(const char* buf, int sendsize);
//简单封装,只隐藏个别不用的参数,记得加const
};
cpp文件"TcpConnect.cpp"
//头文件必须放到cpp文件,不然调用者会产生影响,只对自己内部影响
#include "TcpConnect.h"
#ifdef _WIN32
#include<windows.h>
#else
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/unistd.h>
#endif
#include<iostream>
#include<thread&g