[MREPRO] 4. domaća zadaća - 2019/2020
Gussy
Sasha_Triceps Ocu stici do sutra napisati sve? Ima milijun stvari koje se trebaju implementirati.
Sashat_Triceps
huba buba Pa ovisi koliko si napravio, najviše vremena će ti uzet obrada tekstualne datoteke za \n -ove. Poslije toga ovo ostalo ide glatko
Gussy
Sasha_Triceps Kako si riješio taj problem sa zamjenjivanjem \n sa \r\n jer se ne treba “samo” zamijeniti kako oni kazu nego moras dodati jos jedan znak i onda cijela ta obrada ode u kurac.
Sashat_Triceps
huba buba Učitaš podatke iz filea u neko polje. Zatim u petlji ides bajt po bajt kroz to polje i stavljaš bajtove u buffer za slanje. Kad naiđes na \n , u istoj iteraciji stavi \r zatim \n u buffer.
Gussy
Sasha_Triceps Jel misliš sve podatke iz filea staviti u jedno polje?
Cvija
A kako se postiže konkurentnost?
Jel moram raditi one forkove pa da svako dijete obrađuje svakog klijenta ili postoji neki drugi način?
U TFTP-u u knjizi se spominje neka konkurentnost mijenjanjem portova prilikom slanja paketa
Sashat_Triceps
Cvija Sa dretvama ti je najjednostavnije, svaka dretva obrađuje jednog klijenta i stvara novi socket. S time postižeš i konkurentnost opisanu u tftpu ( tftp server prima zahtjeve na jedan port, ali odgovara na drugom)
Cvija
A kako si provjeravao je li netascii ili octet u poruci koju prima prilikom RRQ?
Jer meni nekako sve proguta u filename
Cvija
Cvija Napravio sam strukture koje pokrivaju svaki dio
Ovako mi izgleda struktura koja pokriva dio za primanjem zahtjeva:
struct tftp_rrq{
uint16_t code;
uint8_t filename[512];
uint8_t zero;
uint8_t mode[30];
uint8_t zero2;
};
Sashat_Triceps
Cvija Ovako mi izgleda struktura za primanje zahtjeva :
`
struct RRQbuffer{
u_int16_t code;
char fileNameAndMode[100];
};
`
Kasnije u kodu sa strtok-om i u programu izdvojis filename i mode, a strcmp-om usporedis string u modeu s “netascii”, odnosno “octet”
Gussy
Cvija problem ti je što taj rrq paket nema određenu dužinu i koliko sam ja razumio iz specifikacije, ta dva “zero” dijela paketa su zapravo \0
.
Cvija
Sasha_Triceps E vidiš, kad tako primim podatak, problem mi je što se u filenameimode spremi samo filename
Mode se ne spremi
Sashat_Triceps
huba buba Ne , mislim da učitavaš po dijelovima u polje. Fileovi su reda veličina nekoliko MB što uzima dosta memorije ako bi ga cijelog išao učitavat. Uzmeš polje od tipa 4KB, učitaš dio podataka u njega i obrađuješ ga. Kad ga obradiš uzmeš novi dio itd itd
Cvija
Cvija [EDIT] riješio
Ako netko ima takav problem, može npr. uzeti strlen od toga i na to mjesto postaviti neki delimiter s kojim će kasnije podijeliti string
Cvija
Treba li program nakon primanja datoteke se zatvoriti ili nastaviti s radom?
angello2
Nisam napiso ovu zadacu na vrijeme misleci da nije obavezno sve predat al jbg sad imam 1 dan za napisat ovaj tftp, jeste vi samo isli po onom tftpserveru koji izade na necijem githubu kad guglas tftpserver ili ste fakat samostalno ovo pisali? Cini mi se pun kurac komplicirano a nemam bas puno vremena, imate neki hint?