0
Visual Studioにサーバーとクライアントを持つプログラムを作成しました。これはすべて、サーバーがクライアントからデータパケットを受信して動作します。これで、データをファイルに保存して分析できるようになりました。ここにサーバーのコードがあります。私が持っているC++のファイルにTCP Serverのデータパケットを保存する
#include "StdAfx.h"
#include "ServerExample.h"
#include <iostream>
unsigned int ServerExample::client_id;
ServerExample::ServerExample(void)
{
// id's to assign clients for our table
client_id = 0;
// set up the server network to listen
network = new ServerNetwork();
}
ServerExample::~ServerExample(void)
{
}
void ServerExample::update()
{
// get new clients
if (network->acceptNewClient(client_id))
{
printf("client %d has been connected to the server\n", client_id);
//increment client ID for the next client
client_id++;
}
receiveFromClients();
}
void ServerExample::receiveFromClients()
{
Packet packet;
// go through all clients using an iterator
std::map<unsigned int, SOCKET>::iterator iter;
for (iter = network->sessions.begin(); iter != network->sessions.end(); iter++)
{
int data_length = network->receiveData(iter->first, network_data);
if (data_length <= 0)
{
//no data recieved
continue;
}
int i = 0;
while (i < (unsigned int)data_length)
{
packet.deserialize(&(network_data[i]));
i += sizeof(Packet);
//switch based on packet type
switch (packet.packet_type) {
case INIT_CONNECTION:
printf("server received init packet from client\n");
sendActionPackets();
int c;
cout << "Press the return key to continue ";
c = cin.get();
if (c == '\n') {
break;
//HERE ARE THE PACKETS I WANT STORED IN THE FILE
case DATA_EVENT:
printf("clientID %d ", packet.clientID);
printf("speed %d ", packet.speed);
printf("longitude %.f ", packet.longitude);
printf("latitude %.f ", packet.latitude);
printf("temperature %.1f\n ", packet.temperature);
printf("fuelLevel %.1f ", packet.fuelLevel);
sendActionPackets();
if (packet.speed < 20) {
printf(" Speed is too low please report any problems. ");
}
else if (packet.temperature > 29)
{
printf(" Please check temperature. Too high. ");
}
else if (packet.temperature < 10)
{
printf(" Please check temperature. Too low. ");
break;
default:
printf("error in packet types\n");
break;
}
}
}
}
}
}
void ServerExample::sendActionPackets()
{
// send action packet
const unsigned int packet_size = sizeof(Packet);
char packet_data[packet_size];
Packet packet;
packet.packet_type = DATA_EVENT;
packet.serialize(packet_data);
network->sendToAll(packet_data, packet_size);
}
はそれを自分でやっての試みを持っているが、私は、クライアントからサーバーが受信したデータパケットのためにそれを行う方法を見つけ出すことはできません。ここで私の試みとfileHandlerの作成です。
#include "stdafx.h"
#include "FileHandler.h"
#include <iostream>
#include <fstream>
using namespace std;
FileHandler::FileHandler()
{
}
int FileHandler::myFile() {
ofstream PacketFile;
PacketFile.open("packetData.txt");
//This is the part I can't figure out
PacketFile << receiveFromClients();
PacketFile.close();
}
FileHandler::~FileHandler()
{
}
私のコードを使用して私に例を示すことで、誰かが正しい方向に私を導くことができたら嬉しいです。ありがとう。