Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt] Komunikacja między procesami i TcpSocket

Ostatnio zmodyfikowano 2014-11-29 14:51
Autor Wiadomość
b00rt00s
Temat założony przez niniejszego użytkownika
[Qt] Komunikacja między procesami i TcpSocket
» 2014-11-21 12:22:44
Planuję zaprogramować komunikację między kilkoma procesami (serwer + klienty), ale potrzebuję to zrobić w sposób między-platformowy. Z tego względu wybrałem bibliotekę Qt. Qt posiada jeden mechanizm między platformowy do tego zadania: parę klas QLocalSocket oraz QLocalServer. Zastanawiam się jednak, czy nie zrobić tej komunikacji w bardziej elastyczny sposób. Czy nie dało by się użyć QTcpSocket oraz QTcpServer, aby pozwolić programom komunikować się lokalnie poprzez localhost lub przez internet. To pozwoliłoby mi na łatwą modyfikację programu w przyszłości, jeśli zaszłaby potrzeba komunikacji przez internet (zdalne klienty).

Moje pytanie brzmi: czy dobrze rozumuję? Czy ktoś maił z czymś podobnym jakieś doświadczenia i wie na co zwrócić uwagę? Albo czy są lepsze sposoby na wykonanie tego zadania, lepsze biblioteki? Nie chce się brać za pisanie, jeśli moje rozwiązanie ma się okazać od początku błędne.
P-121089
DejaVu
» 2014-11-29 14:51:02
W zasadzie Twój opis nie mówi nic o problemie jaki rozwiązujesz. Chcesz wymieniać dane sieciowo - użyj komunikacji sieciowej. Nie potrzebujesz przesyłać danych sieciowo - użyj innych mechanizmów do komunikacji procesów. Np. SharedMemory.

http://qt-project.org/doc​/qt-4.8/qsharedmemory.html

Generalnie musisz przekazać jakoś adres pamięci wspólnej dla procesów. Zazwyczaj się to robi tak, że:
1. Proces A uruchamia się i tworzy obszar pamięci do którego można dostać się z innego procesu za pomocą określonej nazwy.
2. Proces B uruchamia się i sprawdza czy istnieje współdzielony obszar pamięci o określonej nazwie. Jeżeli istnieje to do niego się podłącza. Jeżeli nie istnieje to może go tworzyć (czyli pełnić zadanie procesu A).
3. Jeżeli masz już wspólny obszar pamięci na którym możesz pracować z różnych procesów to potem możesz komunikować się za pomocą tego obszaru pamięci między procesami.

Być może w Qt wystarczy napisać:
C/C++
QSharedMemory pamiec( "TwojaNazwaWspoldzielonejPamieci" );
if( pamiec.create( 12345 ) )
{
    printf( "Utworzono wspoldzielony blok pamieci o rozmiarze %d.\n", pamiec.size() );
} else
if( pamiec.attach() )
{
    printf( "Podlaczono sie do istniejacego bloku pamieci. Rozmiar bloku wynosi %d.\n", pamiec.size() );
} else
{
    printf( "Nie udalo sie utworzyc bloku pamieci wspoldzielonej ani sie do niej podlaczyc.\n" );
    printf( "Tresc bledu: %s\n", pamiec.errorString().c_str() );
}
Kod może się nie kompilować bo go napisałem z palca na podstawie deklaracji metod.
P-121690
« 1 »
  Strona 1 z 1