Code: Select all
inner ip address: 192.168.1.194
inner port: 12345
external ip address: 45.####.####.####
external port: 8888
Client sagt (unter Verwendung weißer IP):
Code: Select all
Exception: connect: The connection was not established because the destination computer rejected the connection request [system:10061 at boost_1_86_0/boost/asio/detail/win_iocp_socket_service.hpp:629 in function 'connect']
server:
Code: Select all
#include
#include
#include
#include
#include
#include
#include
#include
#include
using boost::asio::ip::tcp;
// U W U //
template class Packet_info{
std::vector info;
int rsize = 0;
public:
//атрибуты
int last_sent_data = 0;
bool sent_primary_data = false;
bool received = false;
T_info size;
T_info receiver;
T_info received_msg;
T_info reserved_msg;
T_info id;
//функции
void add_info(T_info value){
this->info.push_back(value);
this->rsize++;
this->size = std::to_string(rsize);
};
T_info get_info(int index){
return *(info.begin()+index);
};
T_info get_packet(){
T_info res(reserved_msg);
if(received){
res = received_msg;
}
else{
if(!sent_primary_data){
int current_data_to_send = last_sent_data;
last_sent_data++;
if(current_data_to_send == 0){
res = size;
}else if(current_data_to_send == 1){
res = receiver;
}
else{
sent_primary_data = true;
last_sent_data = 0;
};
};
if(sent_primary_data){
int current_data_to_send = last_sent_data;
last_sent_data++;
if((info.begin() + current_data_to_send) != info.end())
//не дошло до конца массива
res = info[current_data_to_send];
else{
//блокировка пакета к отправке
received = true;
};
};
};
return res;
};
bool operator==(Packet_info packet){
int size = 0;
for (auto& i : info)
size += 1;
int i_int = 0;
int equalings = 0;
for(auto i = info.begin(); i != info.end(); i++){
if((*i) == packet.get_info(i_int))
equalings++;
i_int++;
};
if(size == equalings)
return true;
else
return false;
}
};
class Send_service{
std::vector
> packets;
public:
void add_packet(std::string receiver, std::string packet_id, std::vector vec){
Packet_info new_packet;
new_packet.received_msg = "already_received";
new_packet.receiver = receiver;
new_packet.reserved_msg = "nothing was returned";
for(auto i = vec.begin(); i != vec.end(); i++){
new_packet.add_info((*i));
};
packets.push_back(new_packet);
};
std::string process_receiver(std::string receiver, std::string packet_id){
std::string part_of_packet = "not found";
for(auto i = packets.begin(); i != packets.end(); i++){
if((*i).receiver == receiver){
part_of_packet = (*i).get_packet();
break;
};
};
for (auto i = packets.begin(); i != packets.end();) {
if (i->received == true) {
i = packets.erase(i); // Присваиваем i возвращенный итератор
} else {
++i; // Увеличиваем только если не удалили
}
}
return part_of_packet;
};
};
Send_service Send_service;
class session : public std::enable_shared_from_this {
public:
session(tcp::socket socket) : socket_(std::move(socket)) {}
void start() {
do_read();
}
private:
void do_read() {
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_, max_length),
[this, self](boost::system::error_code ec, std::size_t length)
{
if (!ec) {
do_process(length);
} else {
std::cerr