[Dev c++] 'zdalna konsola' - przesyłanie komend

0

Witam !!
Chcę zrobić program zbliżony funkcjonalnością do linuxowego ssh, czyli 'zdalna konsola'.
Mam już napisany program klienta i serwera, jednak mam pewien problem z serwerem.
Otwieram w nim konsolę opcję popen. Pytanie brzmi - w jaki sposób z klienta mogę wydawać polecenia konsoli serwera? Dodam, że przesyłanie komunikatów dziala mi bez problemów.
Gdy w utworzonej w ten sposób konsoli na serwerze napiszę 'dir' to wynik jest i na serwerze i w oknie klienta. Pytanie - jak zrobić, żeby to 'dir' można było napisać z poziomu klienta? 'system' odpada, bo nie obsłuży programów w stylu ftp. Wiem że muszę użyć 'popen' lub czegoś podobnego, jednak za nic nie umiem wstawiać znaków do już odpalonego programu (np. konsoli).
Jeśli powyższa treść jest niezrozumiała (bo mam zdolności do zagmatwania nawet najprostszego opisu):
chcę wykonywać programy konsolowe na komputerze z serwerem siedząc przy komputerze z klientem.

0

Wywołaj 'system' po stronie serwera i po sprawie.

Taka uwaga jeszcze - konsola na serwerze wcale nie musi być widoczna. Najlepiej jak przekierujesz wyjście programu na serwerze do jakiegoś strumienia obsługiwanego przez ten program, który to strumień będzie przesyłany do klienta.

Ja bym to zrobił tak: na serwerze jeden proces master zarządzający komunikacją. Na każde połączenie od klienta master tworzy workera - potomny proces, którego wyjście przekierowane jest na strumień wewnątrz mastera (Creating a Child Process with Redirected Input and Output). I działa to tak:

  • klient wysyła komendę do mastera
  • master podaje odebraną komendę odpowiedniemu workerowi
  • worker wywołuje 'system' z komendą od mastera
  • master czyta wyjście workera i przesyła je do klienta

worker:

string komenda;
for(;;)
{
   getline(cin, komenda);
   system(komeda.c_str());
}

master:

string komenda, wynik;
for(;;)
{
   komenda = odbierz_od_klienta();
   podaj_na_wejscie_workera(komneda);
   wynik = odczytaj_z_wyjscia_workera();
   wyslij_do_klienta(wynik);
}

klient:

string komenda, wynik;
for(;;)
{
   getline(cin, komenda);
   wyslij_do_serwera(komenda);
   wynik = odbierz_od_serwera();
   cout << wynik;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1