Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[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