Kezdőoldal » Számítástechnika » Programozás » Hogyan működik a viber?

Csizi Miron kérdése:

Hogyan működik a viber?

Figyelt kérdés

Én úgy képzeltem el, hogy egy felhasználó(kliens) küld adatot a (servernek) majd a server elküldi a megfelelő (kliens)-nek. Nem tudom pontosan, hogy működik. Ez ilyen TCP server megoldás? Ha már felteszem a kérdést, van-e megfelelő dokumentáció (lehetőleg magyarul) ami elmagyarázza, hogyan lehet ilyet csinálni (egyébként c++ ban kéne).


Köszönöm!

Üdv.:M



2019. nov. 21. 19:14
 1/4 anonim ***** válasza:
78%

A TCP kommunikáció alapvetően úgy néz ki, hogy van egy szerver és egy kliens. A szerver készít egy socket-et, ami egy kommunikációs csatorna leírója, vagy másképp egy kommunikációs végpont. Ezután a szerver kiválasztja a kommunikáció formáját, egy protokollt amivel kommunikálni fog, és egy portot, amire "bindeli" magát. Ezek az adatok a socket-hez lesznek társítva.

Majd a szerver "listen" állapotba lép, azaz hallgaztózik a megadott porton, jelzi az operációs rendszernek, hogy az adott porton kapcsolatot fogad el, majd várakozik addig, amíg egy kliens nem kapcsolódik hozzá.


A kliens készít egy socketet, ehhez ő is megadja a szükséges adatokat, csatlakozik a szerverhez, végül elküldi az adatokat.


Példnak okáért C nyelven mutatom.

Szerver:

socket_desc = socket(AF_INET, SOCK_STREAM, 0); // socket letrehozasa: AF_INET - cimcsalad (IPv4), SOCK_STREAM - protokoll megadása (kapcsolat-alapu)

server.sin_family = AF_INET; // szerver beallitasainak megadasa

server.sin_addr.s_addr = INADDR_ANY;

server.sin_port = htons(8080);

bind(socket_desc, (struct sockaddr *)&server, sizeof(server)); // bindeles

listen(socket_desc , 3); // hallgatozas

client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c); // bejovo kapcsolatok elfogadasa

recv(client_sock, client_message, 2000, 0); // adat fogadasa egy 2000 byte meretu pufferbe

close(client_sock); // socket lezarasa


A kliens:

socket_desc = socket(AF_INET , SOCK_STREAM , 0); // socket letrehozasa

server.sin_addr.s_addr = inet_addr("127.0.0.1"); // kliens beallitasainak megadasa - ez az a szerver cim ahova csatlakozunk

server.sin_family = AF_INET;

server.sin_port = htons(8080);

connect(socket_desc, (struct sockaddr*)&server, sizeof(server)); // csatlakozas a szerverhez

send(socket_addr, message, 2000, 0); // 2000 bytenyi adat kuldese a szerver fele

close(socket_desc); // socket lezarasa


Ez egy nagyon alap implementáció, a gyakorlat nagyságrendekkel ennél bonyolultabb.

Itt egy folyamatábra, ami vázlatosan ábrázolja a kommunikációt: [link]

Itt a wiki leírása: [link]

Itt pedig egy jóval bővebb leírás: [link]

2019. nov. 21. 20:28
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:

A Viber UDP protokollt is használ a VOIP kapcsolathoz - mint az az alábbiakból kiderül:

"In order for Viber Desktop to run on your computer, the following ports must be open for all addresses for both TCP and UDP:

5242

4244

5243

7985

80

443"

Forrás: Viber - Opening ports for Viber Desktop [ [link] ]


"The RTP stream of the audio or audio/video call is converted to SRTP and encrypted via Salsa20 algorithm using the session key"

Forrás: Viber - Viber encryption overview [ [link] ]


Az SRTP meg UDP:

[link]

2019. nov. 22. 00:34
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
52%
Szerintem a kérdezőt a szöveges üzenetek küldési módja érdekli.
2019. nov. 22. 13:56
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:

Van egy (vagy több) szervered amelyre fel lehet csatlakozni a telefonokon futó kliens programmal.

Minden kliens egyedi azonosítót (telszám) kap, így lesz más klienssel összekapcsolható.

A kliens egy protokollon keresztül adatot (üzenetet) küld a másiknak. Az üzenet fejlécében adja tudtára a szervernek, hogy kinek küldi az üzenetet. A szerver meg elküldi, ha tudja.


Az UDP protokollról tudni érdemes, hogy alapban nincs visszajelzés, tehát a kliens nem tudja ellenőrizni, hogy az általa küldött üzenet megérkezett-e a címzetthez.

2019. nov. 22. 14:43
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!