[MREPRO] 3. domaća zadaća - 2019/2020
Gussy
Jel itko počeo raditi? Što mi znači onaj offset u poruci i kakvu ulogu radi taj network byte order? Jel to trebam provući kroz ntohs() prije korištenja?
Cvija
huba buba
Ja bih pretpostavio da je to pozicija u datoteci od koje želimo čitati (taj broj će uglavnom biti 0, osim u slučaju kad se dogodi da nije prenesena cijela datoteka pa se onda mora nastavljati prijenos, a to je ona -c opcija kod tcpklijenta)
Pošto je u Network byte order, da trebaš to pretvoriti
Neka me netko ispravi ako je krivo
Cvija
Kako znati da tcpserver nema prava za čitanje datoteke?
menace_master
Cvija postoji ovo https://linux.die.net/man/2/access , ali nisam jos rijesila tak da ne znam kak tocno funkcionira
Cvija
Jel pomak tražene datoteke (offset) i ime datoteke šaljemo jednim send-om ili sa dva?
Jer ja šaljem sa dva send-a i primam podatke sa dva recv, prvi mi se prihvati, a drugi ne. Tj. offset mi se pošalje i učita u buffer, a ime datoteke ne (u drugi posebni buffer).
[EDIT]
Kad pogledam u Wireshark-u, prva mi se poruka pošalje bez zastavice FIN, a druga je poslana (ime datoteke), ali sa zastavicom FIN
angello2
moze neko pojasnit kaj ste radili s tim offsetom ak ste uspjeli rjesit? ntohs nikako osposobit da radi na tom, opcenito ne kuzim kak nagurat int u 4 chara
Cvija
angello2
Probaj koristiti itoa():
https://www.techiedelight.com/implement-itoa-function-in-c/
Morat ćeš ju implementirati kao funkciju, jer inače ti neće raditi, a na ovom linku ti je implementacija
MrBerglas
angello2 Ovako sam ja: offset spremim u int kao veličinu već postojeće datoteke. Zatim taj offset konvertiram u network byte order, uz htonl i pošaljem na server sa kao send(server, &offset, 4, 0);
(zatim šaljem filename, u zasebni send())
Na strani servera, učitam sa recv(client, &offset, 4, 0);
i napravim ntohl
angello2
Cvija okej al mislim općenitije kaj si radio, u klijentu saljem htons od velicine fajla koji je naveden, onda server to prima i radi na tom broju ntohs da bi dobio pravi offset, jel to dobro? ne kuzim uopce cemu to pretvaranje u network byte order kad ionak server to odma treba prebacit natrag da bi ista radio s tim brojem. i jos mi stvara problem jer evo ja npr posaljem offset 15000 koji htons pretvori u 38970, server to primi i pretvori u 14607, wtf?
Cvija
Je li itko uspio poslati onu pxeboot datoteku bez problema?
Meni u prvoj liniji promijeni | u }, a koristim getline kao čitanje iz datoteke
MrBerglas
angello2 Budući da offset koristi 4 okteta, trebao bi koristiti ntohl i htonl funkciju (L predstavlja long, tj 4 okteta u ovom slučaju).
angello2
MrBerglas hvala, kad tak radim uspijem, al kolko sam skuzio iz upute to bi sve trebo bit jedan send al jbg
MrBerglas
Alternativa bi bila napraviti strukturu poput struct MSG { int offset, char[MAX_FILENAME]};
i nju onda slati u jednom send
pozivu. Naravno, prije toga napraviti htonl
poziv i postaviti veličinu za slanje na sizeof(struct MSG);
.
Gussy
što ako nisam napravio ovaj domaći? imam te direktorije i fileove na gitu ali to ništa nije gotovo