[MREPRO] 2. laboratorijska vježba - 2019/2020
Sashat_Triceps
Jel netko možda već počeo raditi na labosu? Ako da, kako riješiti za bota kad šalje payloadove žrtvama da istovremeno sluša ako mu neka žrtva pošalje nešto?
Za server piše da treba riješiti sa pollingom/selectom, a ovdje ne piše niš pa možda se može preko alarma da si olakšamo život
Gussy
Sasha_Triceps jel se to za bot isto odnosi na ovo da ako primi STOP od CandC da se zaustavlja?
Sashat_Triceps
huba buba Da, ako primi od bota STOP zaustavlja slanje
Gussy
I još kako server može imati i tcp i udp na istom portu?
micho
huba buba Može jer su TCP i UDP paketi različiti. Gledaj na to kao na činjenicu da na jednu kućnu adresu mogu dolaziti i pisma i paketi (različite vrste pošiljaka, kao i ovdje različite vrste paketa)
Gussy
M̵̧̩͑̀͝î̶͍̉ć̴̝̾́̀o̶̺̟̣͂̽ jel bi onda trebalo biti dva procesa koji ce svaki obradivati tcp odnosno udp pakete?
micho
huba buba Mislim da nije potrebno (as in moguće je to raditi jednim procesom), ali isto tako mislim da će ti 2 procesa znatno olakšati upravljanje jer je TCP zajeban.
Gussy
M̵̧̩͑̀͝î̶͍̉ć̴̝̾́̀o̶̺̟̣͂̽ u biti tcp socket ne može primiti podatak od udp socketa i obrnuto? tj. kada bindam oba socketa na isti port onda ce tcp socket primati tcp pakete a udp socket udp pakete?
angello2
huba buba mislim da da
micho
huba buba Da, bez problema. Imaju različite identifikacijske n-torke, što znači da svakoj toj n-torci možeš pridružiti drukčiji proces.
Cvija
U zadatku piše da se među onih 20 ip adresa može nalaziti i broadcast adresa.
Što mi taj podatak točno predstavlja?
Znači li to da ako pročitam broadcast adresu prilikom slanja payload-ova da onda payload-ove šaljem svima odjednom?
Gussy
Cvija možda samo postaviš adresu slanja na taj broadcast i valjda funkcija zna što dalje treba.
Gussy
ne razumijem uopće kako bi ovaj select/poll kod servera trebao funkcionirati. ima li neki dobar primjer jer iz njihove skripte ništa ne razumijem.
angello2
huba buba ima neki link u onom pdfu predavanja gdje je primjer servera, ja sam po tom select() radio
Meni radi server sa selectom tak da pitaj ak trebas neki specificni dio
Gussy
angello2 znači taj select() se poziva na početku rada servera i onda on vrti petlju i gleda je li dosla konekcija na bilo koji od tih file descriptora? u ovom primjeru od beej to bi bila ova petlja
for(i = 0; i <= fdmax; i++)
i ovaj if gleda ako ima nekih novih podataka
if (FD_ISSET(i, &read_fds))
angello2
huba buba da, i select moras pozvat svaki put iznova (znaci on ti stoji unutar while(1)), onda taj for prolazi sockete i ovaj if(FD_ISSET) gleda dal je taj specificni socket spreman za citanje. jos nesto sta je mene zajebavalo je da moras svaki put nakon sta ti se javi neki socket ih ponovo sve upisat u read_fds, znaci stavi si sve sockete u neku varijablu i onda ih prije svakog selecta prepisi u read_fds inace ce ti petlja primit samo jednu poruku i onda se beskonacno vrtit bez primanja
Gussy
angello2 znaci stavi si sve sockete u neku varijablu i onda ih prije svakog selecta prepisi u read_fds
to pretpostavljam je ovo
read_fds = master;
kako mogu više socketa staviti u taj master? jel to može biti array?
i još nešto, kada uđe u ovaj if (FD_ISSET(i, &read_fds))
onda radim sve one accept, read, send itd. i onda resetam kao što si rekao taj read_fds?
angello2
huba buba to je to da, nista samo roknes FD_SET na master za svaki socket koji ti treba i ta funkcija ti ih dodaje u set (master i read_fds su setovi), ne trebas array radit
Ovo drugo da pretty much, provjeris koji se tocno socket javio sa ifovima, ako je stdin obradis komande, ak je tcp radis njegov accept i recv i ak je udp recvfrom
Ne znam meni je oke ovaj select nije tak strasno
Gussy
bilo bi lakše sto puta da se radi sa procesima i threadovima joj