TMClient文件夹中文件:
TMClient.h:
#ifndef __TCP_MULTIPLEXING_CLIENT_H__
#define __TCP_MULTIPLEXING_CLIENT_H__
#include "../Head/Uncopy.h"
#include "../TConnection/TConnection.h"
class TMClient : public TConnection, public Uncopy
{
public:
TMClient(const char * host, const char * serv);
~TMClient();
public:
void mainloop();
protected:
virtual bool handlecmd(char * data) = 0;
protected:
int m_connfd;
};
#endif
TMClient.cpp:
#include <errno.h>
#include <unistd.h>
#include <cstdio>
#include <cstring>
#include "TMClient.h"
TMClient::TMClient(const char * host, const char * serv)
: m_connfd(-1)
{
m_connfd = TConnection::connect(host, serv);
}
TMClient::~TMClient()
{
if (-1 != m_connfd) {
close(m_connfd);
}
}
void TMClient::mainloop()
{
char buff[BUFFSIZ] = { 0 };
const int reserved = sizeof(unsigned short);
printf(">>> ");
while (NULL != fgets(buff + reserved, BUFFSIZ - 1 - reserved, stdin)) {
char * data = buff + reserved;
int len = strlen(data);
if ('\n' == data[len - 1]) {
data[len - 1] = '\0';
--len;
}
if (strcmp("quit", data) == 0) {
break;
}
unsigned short uslen = len;
unsigned char cmd;
if (!handlecmd(data)) {
break;
}
printf(">>> ");
}
if (ferror(stdin)) {
printf("fgets error: %s\n", strerror(errno));
}
close(m_connfd);
m_connfd = -1;
}