1.说明
待编辑…
2.代码
test_server.h
#ifndef INCLUDE_TEST_SERVER_H
#define INCLUDE_TEST_SERVER_H
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <vector>
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <fstream>
#include <iostream>
#include <time.h>
using namespace std;
#define INVALID_SOCKET -1
#define SIZE 60
#define FILENAME "setting.txt"
#define OUTPUTFILENAME "output.txt"
class testServer
{
public:
testServer(void);
~testServer(void);
bool readSocketParam(std::string fileName);
bool listenClient(void);
bool disconnectListen(void);
bool receiveData(void);
bool outputDataProcessing(void);
bool writeFile(std::string outPutFileName);
protected:
int s_socket_fd;
std::string ipAddr;
uint16_t portNum;
char r_buf[SIZE];
std::string oustr;
};
#endif /*INCLUDE_TEST_SERVER_H*/
test_server.cpp
#include "test_server.h"
/*
* @brief Contructor
*/
testServer::testServer(void)
{
s_socket_fd = INVALID_SOCKET;
ipAddr = "";
portNum = 0;
memset(r_buf, 0 , (size_t)SIZE);
oustr = "";
}
/*
* @brief Destructor
*/
testServer::~testServer(void){}
/*
* @brief read setting file(load socket param)
* @param [in] FileName
* @return[in] result (ture:success false:failure)
*/
bool testServer::readSocketParam(std::string FileName)
{
ifstream input(FileName.c_str());
std::string line;
std::vector<string> IPinfo;
if(!input)
{
ipAddr = "";
portNum = 0;
cout <<"load file error : error = no such file" << endl;
return false;
}
else
{
input.seekg(0, ios::end);
streampos fp = input.tellg();
if(int(fp) == 0)
{
cout <<"read parameter error : error = file is empty" << endl;
return false;
}
input.seekg(std::ios::beg);
while (getline (input, line))
{
IPinfo.push_back(line);
}
ipAddr = IPinfo[0];
portNum = static_cast<uint16_t>(std::stol(IPinfo[1]));
if(portNum > 1023 && portNum < 65536)
{
cout << "[load IPaddrs]:"<< ipAddr << endl;
cout << "[load portNum]:"<< portNum << endl;
return true;
}
else
{
cout <<"read parameter error : error = invlid port number" << endl;
return false;
}
}
}
/*
* @brief Listen for client requests
* @return [in] result (ture:success false:failure)
*/
bool testServer::listenClient(void)
{
// step1:构造通讯SOCKET
if((s_socket_fd = socket(AF_INET, SOCK_STREAM,0)) == -1)
{
cout <<"create socket error,errno=" << errno << endl;
return false;
}
else
cout <<"create socket successed " << endl;
// step2:绑定套接字到配置好的一个IP地址和一个端口上
// 配置监听地址和端口
struct sockaddr_in sAddr;
memset(&sAddr, 0, sizeof(sAddr));
sAddr.sin_family = AF_INET;
sAddr.sin_add