导读:
CPP文件:
#include "LogServer.h"
LogServer::LogServer(WORD wPort)
{
this->Port = wPort;
this->addr_len = sizeof(struct sockaddr);
this->count = 0;
if((this->SockFd.sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("Log Server Error!!/n");
return;
}
this->SockFd.server_addr.sin_family = AF_INET;
this->SockFd.server_addr.sin_port = htons(this->Port);
this->SockFd.server_addr.sin_addr.s_addr = INADDR_ANY;
memset(this->SockFd.server_addr.sin_zero, 0, sizeof(this->SockFd.server_addr.sin_zero));
if(bind(this->SockFd.sock, (struct sockaddr *)&this->SockFd.server_addr, sizeof(struct sockaddr)) == -1)
{
printf("Log Server Bind Error!!/n");
return;
}
if(listen(this->SockFd.sock, BACKLOG) == -1)
{
printf("Log Server Listen error!!/n");
return;
}
this->SockFd.is_connect = 0;
this->SockFd.wait_cycle = 0;
}
void LogServer::Execute()
{
while(1)
{
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_SET(this->SockFd.sock, &readfds);
if (this->SockFd.is_connect == 1)
{
FD_SET(this->SockFd.subsock, &readfds);
}
if (select(FD_SETSIZE, &readfds, NULL, NULL, &tv) >0)
{
if (FD_ISSET(this->SockFd.sock, &readfds)) //new connect
{
if (this->SockFd.is_connect == 1)
{
close(this->SockFd.subsock);
}
//send_read_p[i] = send_write_p[i];
//receive_read_p[i] = receive_write_p[i];
this->SockFd.subsock = accept(this->SockFd.sock,(struct sockaddr *)&this->SockFd.client_addr, &addr_len);
this->SockFd.is_connect = 1;
printf("PORT %d is connected to LogServer./n", this->Port);//连接成功,现在服务端就可以向客户端发信息了.
//write(this->SockFd.subsock,WriteBuff,iLength);
}
else
{
if (FD_ISSET(this->SockFd.subsock, &readfds)) //read socket
{
this->count = read(this->SockFd.subsock, this->ReadBuff, 512);
if (count <= 0) //close connect
{
close(this->SockFd.subsock);
//send_read_p[i] = send_write_p[i];
//receive_read_p[i] = receive_write_p[i];
this->SockFd.is_connect = 0;
printf("PORT %d is disconneced/n", this->Port);
}
else
{
//if(GetDebug())
{
printf("/nLog Server Receive Data:/n");
for (int k=0; k
{
printf("%02X ",this->ReadBuff[k]);
}
}
}
}
}
}
usleep(10000); //10ms
}
}
头文件:
#include
#include
#include
#include
#include
#include
#include
#include //sockaddr_in结构定义在这个文件中
#include
#include
#include
#include
#define BACKLOG 10
struct StrSock{
int sock;
int subsock;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int is_connect;
int wait_cycle;
};
class LogServer
{
private:
struct StrSock SockFd;
WORD Port;
socklen_t addr_len; //这个变量有的操作系统中可以被定义为int型的,不过在这个操作系统中不能这么定义,必须被定义为socklen_t型的.
struct timeval tv;
fd_set readfds;
int count;
BYTE ReadBuff[512];
struct hostent *local;
public:
LogServer(WORD iPort);
void Execute();
};
本文转自
http://zxlest.blog.163.com/blog/static/2312490420073239144488/
CPP文件:
#include "LogServer.h"
LogServer::LogServer(WORD wPort)
{
this->Port = wPort;
this->addr_len = sizeof(struct sockaddr);
this->count = 0;
if((this->SockFd.sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("Log Server Error!!/n");
return;
}
this->SockFd.server_addr.sin_family = AF_INET;
this->SockFd.server_addr.sin_port = htons(this->Port);
this->SockFd.server_addr.sin_addr.s_addr = INADDR_ANY;
memset(this->SockFd.server_addr.sin_zero, 0, sizeof(this->SockFd.server_addr.sin_zero));
if(bind(this->SockFd.sock, (struct sockaddr *)&this->SockFd.server_addr, sizeof(struct sockaddr)) == -1)
{
printf("Log Server Bind Error!!/n");
return;
}
if(listen(this->SockFd.sock, BACKLOG) == -1)
{
printf("Log Server Listen error!!/n");
return;
}
this->SockFd.is_connect = 0;
this->SockFd.wait_cycle = 0;
}
void LogServer::Execute()
{
while(1)
{
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_SET(this->SockFd.sock, &readfds);
if (this->SockFd.is_connect == 1)
{
FD_SET(this->SockFd.subsock, &readfds);
}
if (select(FD_SETSIZE, &readfds, NULL, NULL, &tv) >0)
{
if (FD_ISSET(this->SockFd.sock, &readfds)) //new connect
{
if (this->SockFd.is_connect == 1)
{
close(this->SockFd.subsock);
}
//send_read_p[i] = send_write_p[i];
//receive_read_p[i] = receive_write_p[i];
this->SockFd.subsock = accept(this->SockFd.sock,(struct sockaddr *)&this->SockFd.client_addr, &addr_len);
this->SockFd.is_connect = 1;
printf("PORT %d is connected to LogServer./n", this->Port);//连接成功,现在服务端就可以向客户端发信息了.
//write(this->SockFd.subsock,WriteBuff,iLength);
}
else
{
if (FD_ISSET(this->SockFd.subsock, &readfds)) //read socket
{
this->count = read(this->SockFd.subsock, this->ReadBuff, 512);
if (count <= 0) //close connect
{
close(this->SockFd.subsock);
//send_read_p[i] = send_write_p[i];
//receive_read_p[i] = receive_write_p[i];
this->SockFd.is_connect = 0;
printf("PORT %d is disconneced/n", this->Port);
}
else
{
//if(GetDebug())
{
printf("/nLog Server Receive Data:/n");
for (int k=0; k
{
printf("%02X ",this->ReadBuff[k]);
}
}
}
}
}
}
usleep(10000); //10ms
}
}
头文件:
#include
#include
#include
#include
#include
#include
#include
#include //sockaddr_in结构定义在这个文件中
#include
#include
#include
#include
#define BACKLOG 10
struct StrSock{
int sock;
int subsock;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int is_connect;
int wait_cycle;
};
class LogServer
{
private:
struct StrSock SockFd;
WORD Port;
socklen_t addr_len; //这个变量有的操作系统中可以被定义为int型的,不过在这个操作系统中不能这么定义,必须被定义为socklen_t型的.
struct timeval tv;
fd_set readfds;
int count;
BYTE ReadBuff[512];
struct hostent *local;
public:
LogServer(WORD iPort);
void Execute();
};
本文转自
http://zxlest.blog.163.com/blog/static/2312490420073239144488/