138 lines
3.0 KiB
C++
138 lines
3.0 KiB
C++
|
|
//
|
|||
|
|
// Created by matrixai on 3/26/24.
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#include "BaseSocket.h"
|
|||
|
|
|
|||
|
|
//构造函数
|
|||
|
|
//输入参数:无
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:无
|
|||
|
|
BaseSocket::BaseSocket()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//析构函数
|
|||
|
|
//输入参数:无
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:无
|
|||
|
|
BaseSocket::~BaseSocket()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//打开socket
|
|||
|
|
//输入参数:无
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:无
|
|||
|
|
void BaseSocket::Open()
|
|||
|
|
{
|
|||
|
|
nSocketId = socket(AF_INET, SOCK_STREAM, 0); //SOCK_NONBLOCK
|
|||
|
|
|
|||
|
|
if(nSocketId == -1)
|
|||
|
|
{
|
|||
|
|
bRun = false;
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
struct timeval recvTimersetting;
|
|||
|
|
//接收超时时间固定3秒
|
|||
|
|
recvTimersetting.tv_sec = 3;
|
|||
|
|
recvTimersetting.tv_usec = 0;
|
|||
|
|
|
|||
|
|
//设定接收超时时间
|
|||
|
|
setsockopt(nSocketId, SOL_SOCKET, SO_RCVTIMEO, &recvTimersetting, sizeof(recvTimersetting));
|
|||
|
|
|
|||
|
|
struct timeval sendTimersetting;
|
|||
|
|
//发送超时时间固定3秒
|
|||
|
|
sendTimersetting.tv_sec = 3;
|
|||
|
|
sendTimersetting.tv_usec = 0;
|
|||
|
|
|
|||
|
|
//设定发送超时时间c
|
|||
|
|
setsockopt(nSocketId, SOL_SOCKET, SO_SNDTIMEO, &sendTimersetting, sizeof(sendTimersetting));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设定socket所用的IP对应的端口号
|
|||
|
|
//输入参数:
|
|||
|
|
// int port:
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:无
|
|||
|
|
void BaseSocket::SetPort(int port, std::string strIp)
|
|||
|
|
{
|
|||
|
|
memset(&serv_addr, 0, sizeof(serv_addr));
|
|||
|
|
serv_addr.sin_family = AF_INET;
|
|||
|
|
serv_addr.sin_port = htons(port); //没有使用的端口
|
|||
|
|
serv_addr.sin_addr.s_addr = inet_addr(strIp.c_str()); //本地所有的IP
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//socket初始化,进行bind/listen/accept处理
|
|||
|
|
//输入参数:无
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:无
|
|||
|
|
void BaseSocket::Init()
|
|||
|
|
{
|
|||
|
|
/*
|
|||
|
|
bind(nSocketId, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
|
|||
|
|
|
|||
|
|
//请求排队的最大长度固定为64
|
|||
|
|
listen(nSocketId, 64);
|
|||
|
|
struct sockaddr_in clien_addr;
|
|||
|
|
|
|||
|
|
nConnectId = accept(nSocketId, (struct sockaddr*)&clien_addr, &clien_len);
|
|||
|
|
|
|||
|
|
*/
|
|||
|
|
socklen_t serv_len = sizeof(serv_addr);
|
|||
|
|
nConnectId = connect(nSocketId, (struct sockaddr*)&serv_addr, serv_len);
|
|||
|
|
|
|||
|
|
if(nConnectId >= 0){
|
|||
|
|
bRun = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//从socket读取数据
|
|||
|
|
//输入参数:无
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:
|
|||
|
|
// int len:读取到的数据长度
|
|||
|
|
int BaseSocket::Read()
|
|||
|
|
{
|
|||
|
|
memset(chbuffer, 0x00, sizeof(chbuffer));
|
|||
|
|
int len = recv(nSocketId, chbuffer, (sizeof(chbuffer) - 1), 0);
|
|||
|
|
if(nConnectId < 0 || len == 0) bRun = false;
|
|||
|
|
return len;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int BaseSocket::Monitor()
|
|||
|
|
{
|
|||
|
|
memset(chbuffer, 0x00, sizeof(chbuffer));
|
|||
|
|
chbuffer[0] = 0x30;
|
|||
|
|
int len = send(nSocketId, chbuffer, (sizeof(chbuffer) - 1), 0);
|
|||
|
|
if(nConnectId < 0 || len == 0) bRun = false;
|
|||
|
|
return len;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//返回socket状态是否连接
|
|||
|
|
//输入参数:无
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:
|
|||
|
|
// bool bRun:true正常运行 false未连接
|
|||
|
|
bool BaseSocket::bRuning()
|
|||
|
|
{
|
|||
|
|
return bRun;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//关闭socket
|
|||
|
|
//输入参数:无
|
|||
|
|
//输出参数:无
|
|||
|
|
//返回值:无
|
|||
|
|
void BaseSocket::Close()
|
|||
|
|
{
|
|||
|
|
if(nConnectId != 0){
|
|||
|
|
close(nConnectId);
|
|||
|
|
}
|
|||
|
|
if(nSocketId != 0){
|
|||
|
|
close(nSocketId);
|
|||
|
|
}
|
|||
|
|
bRun = false;
|
|||
|
|
}
|