Train_RFID_Linux/code/BaseSocket/BaseSocket.cpp

141 lines
3.1 KiB
C++
Raw Normal View History

//
// 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);
std::string heart = "matrixai";
int len = send(nSocketId, heart.c_str(), (sizeof(heart) - 1), 0);
if(nConnectId < 0 || len == 0) bRun = false;
return len;
}
//返回socket状态是否连接
//输入参数:无
//输出参数:无
//返回值:
// bool bRuntrue正常运行 false未连接
bool BaseSocket::bRuning()
{
return bRun;
}
//关闭socket
//输入参数:无
//输出参数:无
//返回值:无
void BaseSocket::Close()
{
if(nConnectId != 0){
close(nConnectId);
}
if(nSocketId != 0){
close(nSocketId);
}
bRun = false;
}