C++ 文件处理的简单应用(模拟从各种客户端访问一个网站)

目录

 

题目要求:

代码实现:

源.cpp:

Client.h:

Client.cpp: 


 

题目要求:

模拟从各种客户端访问一个网站

1)随机生成ip地址

2)记录不同ip地址的数量

ip地址分类方式:

      Class A: 0.0.0.0 – 127.255.255.255
      Class B: 128.0.0.0 – 191.255.255.255
      Class C: 192.0.0.0 – 223.255.255.255
      Class D: 224.0.0.0 – 239.255.255.255
      Class E: 240.0.0.0 – 247.255.255.255

代码实现:

源.cpp:

#include<iostream>
#include<fstream>
#include<iomanip>
#include<windows.h>
#include<ctime>
#include"Client.h"
using namespace std;
int cnt[5];
void getData(fstream &x)//随机生成一组数据
{
	int a, b, c, d, f, g, h, i, j;
	a = rand() % 256;
	b = rand() % 256;
	c = rand() % 256;
	d = rand() % 256;
	f = rand() % 12 + 1;
	g = rand() % 30 + 1;
	h = rand() % 24;
	i = rand() % 60;
	j = rand() % 60;
	Client clientData(a, b, c, d, 2022, f, g, h, i, j);
	x.write(reinterpret_cast<const char*>(&clientData), sizeof(Client));
	clientData.printAddress();
	cout << " ";
	clientData.printDate();
	cout << " ";
	clientData.printTime();
	cout << endl;
}
int main()
{
	fstream outData("data.dat", ios::out | ios::binary);//创建一个fstream对象,打开一个文件以二进制输出
	if (!outData)
	{
		cerr << "File could not be oppened" << endl;
		exit(EXIT_FAILURE);
	}
	srand(0);
	for (int i = 0; i < 100; i++)
	{
		getData(outData);
	}
	outData.close();//在不使用文件时立刻关闭文件
	ifstream inData("data.dat", ios::in | ios::binary);
	Client clientData;
	if (!inData)
	{
		cerr << "File could not be oppened" << endl;
		exit(EXIT_FAILURE);
	}
	inData.read(reinterpret_cast<char*>(&clientData), sizeof(Client));//以二进制形式读取文件
	while (inData && !inData.eof())//用ios函数判断是否达到文件末尾
	{
		if (clientData.fAddress() >= 0 && clientData.fAddress() < 128) cnt[0]++;
		else if (clientData.fAddress() >= 128 && clientData.fAddress() < 192) cnt[1]++;
		else if (clientData.fAddress() >= 192 && clientData.fAddress() < 224) cnt[2]++;
		else if (clientData.fAddress() >= 224 && clientData.fAddress() < 247) cnt[3]++;
		else if (clientData.fAddress() >= 247 && clientData.fAddress() < 256) cnt[4]++;
		inData.read(reinterpret_cast<char*>(&clientData), sizeof(Client));//以二进制形式读取文件
	}
	inData.close();
	cout << "\nNumber of class A addresses: " << cnt[0] << endl
		<< "Number of class B addresses: " << cnt[1] << endl
		<< "Number of class C addresses: " << cnt[2] << endl
		<< "Number of class D addresses: " << cnt[3] << endl
		<< "Number of class E addresses: " << cnt[4] << endl;
	system("pause");
	return 0;
}

ps :时间戳我随便设定的,可以自己改改 

Client.h:

#pragma once
class Client
{
public:
	Client(int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0);
	void setAddress(int, int, int, int);
	void setyear(int);
	void setmonth(int);
	void setday(int);
	void sethour(int);
	void setminute(int);
	void setsecond(int);
	void printAddress();
	void printDate();
	void printTime();
	int fAddress();
private:
	int address[4];
	int year, month, day, hour, minute, second;
};

Client.cpp: 

#include "Client.h"
#include<iomanip>
#include<iostream>
using namespace std;
Client::Client(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
{
	setAddress(a, b, c, d);
	setyear(e);
	setmonth(f);
	setday(g);
	sethour(h);
	setminute(i);
	setsecond(j);
}
void Client::setAddress(int a, int b, int c, int d)
{
	address[0] = a;
	address[1] = b;
	address[2] = c;
	address[3] = d;
}
void Client::setyear(int x)
{
	year = x;
}
void Client::setmonth(int x)
{
	month = x;
}
void Client::setday(int x)
{
	day = x;
}
void Client::sethour(int x)
{
	hour = x;
}
void Client::setminute(int x)
{
	minute = x;
}
void Client::setsecond(int x)
{
	second = x;
}
void Client::printAddress()
{
	cout << address[0] << "." << address[1] << "." << address[2] << "." << address[3];
}
void Client::printDate()
{
	cout << year << "-" << setw(2) << setfill('0') << month << "-" << setw(2) << setfill('0') << day;//如果个位小于十需要补零
}
void Client::printTime()
{
	cout << setw(2) << setfill('0') <<hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second;
}
int Client::fAddress()
{
	return address[0];
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个简单C++ socket服务器,它可以读取本地的TXT文件并发送给客户端: ```c++ #include <iostream> #include <fstream> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8080 int main() { int server_fd, new_socket, valread; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; char* hello = "Hello from server"; // 创建socket文件描述符 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置socket选项 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // 绑定socket到指定端口 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听socket if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } // 接受客户端连接 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } // 读取本地TXT文件并发送给客户端 std::ifstream file("example.txt"); std::string file_contents((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); const char* data = file_contents.c_str(); send(new_socket, data, strlen(data), 0); std::cout << "File sent to client" << std::endl; return 0; } ``` 在上述代码中,我们使用C++的fstream库读取了本地的TXT文件,并将文件内容发送给客户端。请注意,此示例代码仅适用于本地运行,如果要在互联网上运行,则需要使用公共IP地址和端口号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItsNorth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值