Member 14523745 Ответов: 1

Как начать кодировать сетевой симулятор предпочтительно на любом языке?


Проблема в том, что я не понимаю, как работает симуляция и с чего мне следует начать. до сих пор я никогда не занимался сетевым моделированием ,только читал тему компьютерной сети и никогда не делал ничего практического.

Что я уже пробовал:

я видел видео на youtube о сетевом моделировании, но я не сделал ничего практического, поэтому я хочу спросить вас, с чего мне начать.

wseng

Есть ли у вас какие-либо требования?

1 Ответов

Рейтинг:
5

Stefan_Lang

Я предлагаю сначала реализовать реальную вещь, прежде чем пытаться имитировать. Если вы не понимаете, какая функциональность вам нужна, чтобы заставить его работать, нет смысла писать симуляцию.

В зависимости от того, о какой сети вы думаете, попробуйте поискать в google примеры кода.

Как только вы знаете, что вам нужно, напишите класс (interface), который предоставляет все необходимые функции, а затем выведите из него класс реализации, который переопределяет эти функции с моделируемым поведением. То, как это поведение должно выглядеть, зависит от того, что вы хотите смоделировать.

Вот базовый дизайн на языке C++:

#include <iostream>
#include <string>
class NetworkBase {
public:
    virtual ~NetworkBase() {}
    virtual int connect(const std::string& address) = 0;
    virtual int send(const std::string& message) = 0;
    virtual std::string receive() = 0;
    virtual int disconnect() = 0;
};
class NetworkSimulation : public NetworkBase {
private:
    int state_;
    std::string address_;
public:
    NetworkSimulation() : state_(0) {}
    virtual ~NetworkSimulation() {}
    virtual int connect(const std::string& address) {
        if (address.empty())
            return -1; // error!
        address_ = address;
        state_ = 1;
        return 0; // succcess
    }
    virtual int send(const std::string& message) {
        std::cout << "Sending new message to " << address_ << ": " << message<< std::endl;
        return (int)message.size();
    }
    virtual std::string receive() {
        std::string msg;
        std::cout << "Reading message from " << address_ << std::endl;
        std::getline(std::cin, msg);
        std::cout << "Message received from " << address_ << ": " << msg << std::endl;
        return msg;
    }
    virtual int disconnect() {
        if (state_ == 0)
            return -1; // error!
        address_.clear();
        state_ = 0;
        return 0; // succcess
    }
};

int main()
{
    NetworkBase* my_network = new NetworkSimulation;
    std::string address("there");
    int error = my_network->connect(address);
    if (error != 0) {
        std::cout << "Not connected to " << address << std::endl;
    }
    else {
        int msg_size = my_network->send("Hello");
        if (msg_size == 0) {
            std::cout << "Error sending message to " << address << std::endl;
        }
        std::string msg = my_network->receive();
        std::cout << "Message received from " << address << ": " << msg << std::endl;
        error = my_network->disconnect();
        if (error != 0) {
            std::cout << "Error disconnecting from " << address << std::endl;
        }
    }
    delete my_network;

    return 0;
}


Member 14523745

Благодарю вас сэр