Train_RFID_Linux/code/BaseSocket/BaseSocket.cpp

141 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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;
//接收超时时间固定1秒
recvTimersetting.tv_sec = 1;
recvTimersetting.tv_usec = 0;
//设定接收超时时间
setsockopt(nSocketId, SOL_SOCKET, SO_RCVTIMEO, &recvTimersetting, sizeof(recvTimersetting));
struct timeval sendTimersetting;
//发送超时时间固定1秒
sendTimersetting.tv_sec = 1;
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;
}