Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
etaoin shrdlu Forumaš(ica)
Pridružen/a: 23. 09. 2012. (19:15:48) Postovi: (39)16
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
pravipurger Forumaš(ica)
Pridružen/a: 11. 07. 2009. (10:29:44) Postovi: (128)16
Spol:
|
|
[Vrh] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
|
[Vrh] |
|
yellow submarine Forumaš(ica)
Pridružen/a: 01. 10. 2010. (19:28:03) Postovi: (34)16
Spol:
|
|
[Vrh] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
Postano: 16:42 uto, 20. 11. 2012 Naslov: |
|
|
[quote="yellow submarine"]Ako je moguće, zamolila bih asistente ili one koji su imali sve bodove na 3. zadatku, da napišu točno rješenje.
Može i samo ideja, ne treba čitav kod.
Hvala[/quote]
Pripadam ovoj drugoj kategoriji, pa evo mog rjesenja(mozda postoji jos koje da je isto tocno):
primas znak po znak, te ga spremas u polje kojem svaki put radis realloc, i to radis dok ne primis '\0' posto se kod slanja i on posalje... trebalo je primjetit da se salje duljina+1 znak iz stringa koji se salje, a upravo taj zadnji je \0.
Kad to vidis dalje je lako...
yellow submarine (napisa): | Ako je moguće, zamolila bih asistente ili one koji su imali sve bodove na 3. zadatku, da napišu točno rješenje.
Može i samo ideja, ne treba čitav kod.
Hvala |
Pripadam ovoj drugoj kategoriji, pa evo mog rjesenja(mozda postoji jos koje da je isto tocno):
primas znak po znak, te ga spremas u polje kojem svaki put radis realloc, i to radis dok ne primis '\0' posto se kod slanja i on posalje... trebalo je primjetit da se salje duljina+1 znak iz stringa koji se salje, a upravo taj zadnji je \0.
Kad to vidis dalje je lako...
|
|
[Vrh] |
|
yellow submarine Forumaš(ica)
Pridružen/a: 01. 10. 2010. (19:28:03) Postovi: (34)16
Spol:
|
Postano: 16:50 uto, 20. 11. 2012 Naslov: |
|
|
[quote="kkarlo"][quote="yellow submarine"]Ako je moguće, zamolila bih asistente ili one koji su imali sve bodove na 3. zadatku, da napišu točno rješenje.
Može i samo ideja, ne treba čitav kod.
Hvala[/quote]
Pripadam ovoj drugoj kategoriji, pa evo mog rjesenja(mozda postoji jos koje da je isto tocno):
primas znak po znak, te ga spremas u polje kojem svaki put radis realloc, i to radis dok ne primis '\0' posto se kod slanja i on posalje... trebalo je primjetit da se salje duljina+1 znak iz stringa koji se salje, a upravo taj zadnji je \0.
Kad to vidis dalje je lako...[/quote]
Hm, ja sam napravila sličnu stvar samo što sam primala u buffer fiksne duljine pa zatim spremala u polje koje se nanovo realocira sve dok ne primim nulu.
Ne čini mi se kao značajna razlika od tvoga, al na moje rješenje dobila sam nula bodova. :?
Vidjet ćemo sutra na žalbama...
Još jednom, hvala!
kkarlo (napisa): | yellow submarine (napisa): | Ako je moguće, zamolila bih asistente ili one koji su imali sve bodove na 3. zadatku, da napišu točno rješenje.
Može i samo ideja, ne treba čitav kod.
Hvala |
Pripadam ovoj drugoj kategoriji, pa evo mog rjesenja(mozda postoji jos koje da je isto tocno):
primas znak po znak, te ga spremas u polje kojem svaki put radis realloc, i to radis dok ne primis '\0' posto se kod slanja i on posalje... trebalo je primjetit da se salje duljina+1 znak iz stringa koji se salje, a upravo taj zadnji je \0.
Kad to vidis dalje je lako... |
Hm, ja sam napravila sličnu stvar samo što sam primala u buffer fiksne duljine pa zatim spremala u polje koje se nanovo realocira sve dok ne primim nulu.
Ne čini mi se kao značajna razlika od tvoga, al na moje rješenje dobila sam nula bodova.
Vidjet ćemo sutra na žalbama...
Još jednom, hvala!
|
|
[Vrh] |
|
Borgcube Forumaš(ica)
Pridružen/a: 01. 11. 2010. (21:14:10) Postovi: (56)16
Lokacija: Tu i tamo.
|
|
[Vrh] |
|
vinko Forumaš(ica)
Pridružen/a: 26. 08. 2006. (23:08:00) Postovi: (1A8)16
Spol:
Lokacija: PMF-MO 214
|
Postano: 18:15 uto, 20. 11. 2012 Naslov: |
|
|
[quote="Borgcube"]Tko je ispravljao koji zadatak?[/quote]kolega Doko je ispravljao 1. i 3., prof. Manger 4. i 5., a ja 2. zadatak. Ne znam što bih rekao, meni se moj zadatak činio lagan, ali čini se da je vama (kao i onom nekom zavodu za statistiku, koji vodi pravi popis stanovništva:) bio dosta težak. A dođite sutra u 11h na uvid i žalbe. A žalbe kod kolege Doko će biti od 12h.
Borgcube (napisa): | Tko je ispravljao koji zadatak? | kolega Doko je ispravljao 1. i 3., prof. Manger 4. i 5., a ja 2. zadatak. Ne znam što bih rekao, meni se moj zadatak činio lagan, ali čini se da je vama (kao i onom nekom zavodu za statistiku, koji vodi pravi popis stanovništva:) bio dosta težak. A dođite sutra u 11h na uvid i žalbe. A žalbe kod kolege Doko će biti od 12h.
|
|
[Vrh] |
|
etaoin shrdlu Forumaš(ica)
Pridružen/a: 23. 09. 2012. (19:15:48) Postovi: (39)16
|
Postano: 20:01 uto, 20. 11. 2012 Naslov: |
|
|
[quote="vinko"][quote="Borgcube"]Tko je ispravljao koji zadatak?[/quote]kolega Doko je ispravljao 1. i 3., prof. Manger 4. i 5., a ja 2. zadatak. Ne znam što bih rekao, meni se moj zadatak činio lagan, ali čini se da je vama (kao i onom nekom zavodu za statistiku, koji vodi pravi popis stanovništva:) bio dosta težak. A dođite sutra u 11h na uvid i žalbe. A žalbe kod kolege Doko će biti od 12h.[/quote]
Biste li mogli staviti kolokvij u pdf-u na web kolegija ili ovdje kao attachment?
Hvala :)
vinko (napisa): | Borgcube (napisa): | Tko je ispravljao koji zadatak? | kolega Doko je ispravljao 1. i 3., prof. Manger 4. i 5., a ja 2. zadatak. Ne znam što bih rekao, meni se moj zadatak činio lagan, ali čini se da je vama (kao i onom nekom zavodu za statistiku, koji vodi pravi popis stanovništva:) bio dosta težak. A dođite sutra u 11h na uvid i žalbe. A žalbe kod kolege Doko će biti od 12h. |
Biste li mogli staviti kolokvij u pdf-u na web kolegija ili ovdje kao attachment?
Hvala
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 21:24 uto, 20. 11. 2012 Naslov: |
|
|
[quote="yellow submarine"]Ako je moguće, zamolila bih asistente ili one koji su imali sve bodove na 3. zadatku, da napišu točno rješenje.
Može i samo ideja, ne treba čitav kod.[/quote]
Evo i čitav kod.
Rješenje u C-u:
[code:1]char* receive_string(int sock){
const size_t kB = 1024;
char* string = malloc(kB * sizeof(char));
string[0] = '\0';
size_t length = 0;
size_t size = kB;
char buffer[kB];
int done = 0;
while(!done){
size_t received = recv(sock, buffer, kB - 1, 0);
if(buffer[received - 1] == '\0'){
done = 1;
received -= 1;
} else {
buffer[received] = '\0';
}
if(length + received > size){
size += kB;
string = realloc(string, size);
}
strcat(string, buffer);
}
return string;
}[/code:1]
Rješenje u C++u:
[code:1]void receive_string(int sock, string& str){
str.clear();
const size_t kB = 1024;
char buffer[kB];
bool done = false;
while(!done){
size_t received = recv(sock, buffer, kB - 1, 0);
if(buffer[received - 1] == '\0'){
done = true;
} else {
buffer[received] = '\0';
}
string += buffer;
}
}[/code:1]
[size=9][color=#999999]Added after 1 minutes:[/color][/size]
[quote="etaoin shrdlu"]
Biste li mogli staviti kolokvij u pdf-u na web kolegija ili ovdje kao attachment?
[/quote]
Čim prođu kolokviji za one koji su bili bolesni ili su iz nekog drugog opravdanog razloga propustili kolokvij.
yellow submarine (napisa): | Ako je moguće, zamolila bih asistente ili one koji su imali sve bodove na 3. zadatku, da napišu točno rješenje.
Može i samo ideja, ne treba čitav kod. |
Evo i čitav kod.
Rješenje u C-u:
Kod: | char* receive_string(int sock){
const size_t kB = 1024;
char* string = malloc(kB * sizeof(char));
string[0] = '\0';
size_t length = 0;
size_t size = kB;
char buffer[kB];
int done = 0;
while(!done){
size_t received = recv(sock, buffer, kB - 1, 0);
if(buffer[received - 1] == '\0'){
done = 1;
received -= 1;
} else {
buffer[received] = '\0';
}
if(length + received > size){
size += kB;
string = realloc(string, size);
}
strcat(string, buffer);
}
return string;
} |
Rješenje u C++u:
Kod: | void receive_string(int sock, string& str){
str.clear();
const size_t kB = 1024;
char buffer[kB];
bool done = false;
while(!done){
size_t received = recv(sock, buffer, kB - 1, 0);
if(buffer[received - 1] == '\0'){
done = true;
} else {
buffer[received] = '\0';
}
string += buffer;
}
} |
Added after 1 minutes:
etaoin shrdlu (napisa): |
Biste li mogli staviti kolokvij u pdf-u na web kolegija ili ovdje kao attachment?
|
Čim prođu kolokviji za one koji su bili bolesni ili su iz nekog drugog opravdanog razloga propustili kolokvij.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
Borgcube Forumaš(ica)
Pridružen/a: 01. 11. 2010. (21:14:10) Postovi: (56)16
Lokacija: Tu i tamo.
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 0:36 sri, 21. 11. 2012 Naslov: |
|
|
[quote="Borgcube"]Ovo rješenje se ne ponaša baš previše stabilno ako pošiljatelj odluči poslati više od jedne stvari - u tom slučaju će program pokupiti i drugi dio poslanog i postoji mogućnost da nikad neće završiti, ako se ne varam?[/quote]
Tu ste u pravu. Namjerno sam to ignorirao prilikom ispravljanja kolokvija i ovdje kod pisanja rješenja, no točno rješenje bi bilo nešto ovakvo (samo C++ varijanta):
[code:1]void receive_string(int sock, string& str, void*& remaining_data, size_t& remaining_data_length){
str.clear();
const size_t kB = 1024;
char buffer[kB];
size_t null_index;
bool done = false;
size_t received;
while(!done){
received = recv(sock, buffer, kB - 1, 0);
for(null_index = 0; null_index < received && buffer[null_index] != '\0'; ++null_index);
if(null_index < received){
done = true;
} else {
buffer[null_index] = '\0';
}
string += buffer;
}
if(null_index < received){
remaining_data_length = received - null_index - 1;
remaining_data = new char[remaining_data_length];
memcpy(remaining_data, buffer + null_index + 1, remaining_data_length);
} else {
remaining_data = NULL;
remaining_data_length = 0;
}
}[/code:1]
Naravno, ovo je samo ako i dalje želimo podatke primati u većim blokovima, a ne byte po byte. Sada nakon što završimo s primanjem podataka imamo i pristup bilo kakvom višku podataka koji smo eventualno pokupili.
[quote]I što ako se dogodi da je poslano 0 u nekom koraku, onda će program pokušati pristupiti mjestu -1?[/quote]
E, to se ne može dogoditi. [tt]send[/tt] jednostavno neće ništa napraviti ako mu se kaže da pošalje 0 byteova. S druge strane, uočite da povratna vrijednost funkcije [tt]recv[/tt] može biti [tt]0[/tt] jedino u slučaju da je druga strana prekinula konekciju, a to se neće dogoditi dok nam ne pošalje [tt]'\0'[/tt].
Borgcube (napisa): | Ovo rješenje se ne ponaša baš previše stabilno ako pošiljatelj odluči poslati više od jedne stvari - u tom slučaju će program pokupiti i drugi dio poslanog i postoji mogućnost da nikad neće završiti, ako se ne varam? |
Tu ste u pravu. Namjerno sam to ignorirao prilikom ispravljanja kolokvija i ovdje kod pisanja rješenja, no točno rješenje bi bilo nešto ovakvo (samo C++ varijanta):
Kod: | void receive_string(int sock, string& str, void*& remaining_data, size_t& remaining_data_length){
str.clear();
const size_t kB = 1024;
char buffer[kB];
size_t null_index;
bool done = false;
size_t received;
while(!done){
received = recv(sock, buffer, kB - 1, 0);
for(null_index = 0; null_index < received && buffer[null_index] != '\0'; ++null_index);
if(null_index < received){
done = true;
} else {
buffer[null_index] = '\0';
}
string += buffer;
}
if(null_index < received){
remaining_data_length = received - null_index - 1;
remaining_data = new char[remaining_data_length];
memcpy(remaining_data, buffer + null_index + 1, remaining_data_length);
} else {
remaining_data = NULL;
remaining_data_length = 0;
}
} |
Naravno, ovo je samo ako i dalje želimo podatke primati u većim blokovima, a ne byte po byte. Sada nakon što završimo s primanjem podataka imamo i pristup bilo kakvom višku podataka koji smo eventualno pokupili.
Citat: | I što ako se dogodi da je poslano 0 u nekom koraku, onda će program pokušati pristupiti mjestu -1? |
E, to se ne može dogoditi. send jednostavno neće ništa napraviti ako mu se kaže da pošalje 0 byteova. S druge strane, uočite da povratna vrijednost funkcije recv može biti 0 jedino u slučaju da je druga strana prekinula konekciju, a to se neće dogoditi dok nam ne pošalje '\0'.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
vinko Forumaš(ica)
Pridružen/a: 26. 08. 2006. (23:08:00) Postovi: (1A8)16
Spol:
Lokacija: PMF-MO 214
|
|
[Vrh] |
|
|