Sürgős! Egy példa programot tudnátok mutatni amiben több szerver kommunikál egy darab szerverrel?
Ha valaki tud ilyet a neten az kérem írjon rá linket
HOgyan keressek rá a neten?
C alatt Unixon futtatva.
pfuuuu ez jol elírtam.
Tobb cliens (min 5drb) egy darab szerverrel kommunikal.
Pl. ide oda tudok kuldeni szoveget. vagy akar csak egy karaktert
Na most ehhez kell egy kliens, meg egy szerver, és több klienst kell indítani. Ilyen egyszerű az élet. A szerverek alapvetően fel vannak készítve arra, hogy több klienst is kiszolgáljanak.
EZT TALALTAM:"
Az accept addig vár, amíg nem akar egy kliens kapcsolódni a "listening socket"-re. Felépíti a kapcsolatot, de NEM a "listening socket"-re (nem arra, amit megadtunk paraméterként!), hanem létrehoz egy új socket-et, ez lesz a kliens socket, ezzel kapcsolódik össze a kliens. Ezt adja vissza a függvény. Az eredeti socket megmarad utána nekünk, és akárhányszor meghívhatjuk vele az accept-et.
Egy "listening socket"-re többször is meghívhatjuk az accept függvényt, ami mindig más kliens socket-et fog visszaadni. Tehát egy szerver programból egyszerre több klienst is tudunk kiszolgálni, minden hívás az accept-re egy új, a többitől független csatornát hoz létre egy újabb kliens felé (persze, ha volt újabb kliens). A kliens socket-ek mind ugyanarra a portra vannak kötve, ahová a listening socket-et is kötöttük. Ezzel azonban nem lesz gondunk, a TCP nagyon jól tudja, hogy melyik üzenet hová megy, a kapcsolatokat multiplexálja. A kapcsolatokat négy adat alapján azonosítja : Kliens-IP,Kliens-Port,Szerver-IP,Szerver-PORT (plusz a protokoll (TCP,UDP....)).
Ahhoz persze, hogy több klienst tudjunk kiszolgálni, a szerver programot többszálasra, illetve többfolyamatosra (multithreading/multiprocessing) kell megírni.
Példa:
struct sockaddr_in client_addr;
int ssd, csd, length;
...........
if ((cfd = accept(ssd, (struct sockaddr *)&client_addr, &length) < 0) {
perror("accept");
exit(1);
}
/* cfd most a klienssel összekapcsolt socket leíróját tartalmazza */
/* innen lehet kommunikálni*/
Kommunikáció a klienssel
"
Ez alapján ezt a klines server meglehet csinálni vagyis eleg hozzá ennyi,ennyi infobol kiderul hogy hogy kell csinálni?
Ok. megneztem en azt mar mindjart.
Beirtam a includokat.
Futattom. a Serverre nem ir ki hibat a gcc.
Cliensnel azt irja 22,40 sor error: expected expression before '<'token
megpobaltam a hiba ellenere futatni,de azt irja majd a program hogy
bind:Adress already in use
Lekapcsoltm a terminalokat vartam egy 5 percet majd ujra futattam de ugyan az
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!