Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Mreže računala - pomoć oko zadaće (objasnjenje gradiva)

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji siročići (oni koji nemaju svoj podforum) -> Računarski kolegiji
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
PermutiranoPrase
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 10. 09. 2011. (16:08:19)
Postovi: (F4)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
10 = 17 - 7

PostPostano: 19:46 sub, 9. 11. 2013    Naslov: Mreže računala - pomoć oko zadaće Citirajte i odgovorite

Pozdrav!

Više mi zapravo treba pomoć oko funkcije send() nego oko zadatka. :D

Posve se pogubih oko buffera u toj funkciji. I još zaboravih ili pobrkah neke stvari oko pointera i adresa i nizova. :oops:

Moj tok misli:
Imam niz doublova koje moram poslati serveru. Send vraća broj poslanih bajtova. Kao argument prima buffer a to je "adresa (najčešće polja znakova) podataka koje šaljemo". Mogu poslati jednostavno naziv niza (buffer) jer je to adresa prvog elementa u nizu.

Charovi imaju 1B pa kad mi send vrati vrijednost 4, odmah znam da se poslalo 4 chara tj 4 elementa u nizu, pa mogu pisati da u idućem slanju šalje buffer+poslano, ili &buffer[poslano], pri čemu je poslano = send(...).

Sad, kad šaljem doublove, ako mi je funkcija send vratila vrijednost 4, to zapravo znači da se poslao 1 double, i u idućem slanju zapravo šaljem buffer + i, tj &buffer[i], gdje je i = poslano/4?
I u tom slučaju mi je argument duljina_buffera zapravo 4*duljina mog niza kojeg šaljem?

Je l to ok razmišljanje?

Edit: Nije. Šaljem onaj bajt koji piše na adresi buffer+poslano (ili više bajtova koji slijede nakon tog prvog). Duljina buffera je ipak 4x veća jer svaki double zauzima 4 uzastopna bajta.

I kako točno radi send()? Šalje li on npr element po element niza, ili n bajtova po n bajtova, ili pošalje odjednom 100B u prvoj rundi, pa u idućoj npr 120, pa 50, itd, svaki put koliko uspije?
Pozdrav!

Više mi zapravo treba pomoć oko funkcije send() nego oko zadatka. Very Happy

Posve se pogubih oko buffera u toj funkciji. I još zaboravih ili pobrkah neke stvari oko pointera i adresa i nizova. Embarassed

Moj tok misli:
Imam niz doublova koje moram poslati serveru. Send vraća broj poslanih bajtova. Kao argument prima buffer a to je "adresa (najčešće polja znakova) podataka koje šaljemo". Mogu poslati jednostavno naziv niza (buffer) jer je to adresa prvog elementa u nizu.

Charovi imaju 1B pa kad mi send vrati vrijednost 4, odmah znam da se poslalo 4 chara tj 4 elementa u nizu, pa mogu pisati da u idućem slanju šalje buffer+poslano, ili &buffer[poslano], pri čemu je poslano = send(...).

Sad, kad šaljem doublove, ako mi je funkcija send vratila vrijednost 4, to zapravo znači da se poslao 1 double, i u idućem slanju zapravo šaljem buffer + i, tj &buffer[i], gdje je i = poslano/4?
I u tom slučaju mi je argument duljina_buffera zapravo 4*duljina mog niza kojeg šaljem?

Je l to ok razmišljanje?

Edit: Nije. Šaljem onaj bajt koji piše na adresi buffer+poslano (ili više bajtova koji slijede nakon tog prvog). Duljina buffera je ipak 4x veća jer svaki double zauzima 4 uzastopna bajta.

I kako točno radi send()? Šalje li on npr element po element niza, ili n bajtova po n bajtova, ili pošalje odjednom 100B u prvoj rundi, pa u idućoj npr 120, pa 50, itd, svaki put koliko uspije?



_________________
With great power comes great electricity bill.
n!!!!
Theorem 2: Alexander the Great did not exist and he had an infinite number of limbs.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Cobs
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 01. 2008. (13:32:15)
Postovi: (206)16
Spol: muško
Sarma = la pohva - posuda
26 = 40 - 14
Lokacija: Geto

PostPostano: 16:31 ned, 10. 11. 2013    Naslov: Re: Mreže računala - pomoć oko zadaće Citirajte i odgovorite

[quote="PermutiranoPrase"]
I kako točno radi send()? Šalje li on npr element po element niza, ili n bajtova po n bajtova, ili pošalje odjednom 100B u prvoj rundi, pa u idućoj npr 120, pa 50, itd, svaki put koliko uspije?[/quote]

Ono što sam pronašao je da je gornja granica slanja [url=http://en.wikipedia.org/wiki/Maximum_transmission_unit]MTU[/url].
U principu ti je najbolje napraviti probu, slati od jednog podatka pa sve više i više i gledati kako se dijele podaci koji se šalju.
Ono što (ne znam, ali) sam prilično uvjeren da se uvijek šalje višekratnik [tt]size_t[/tt] iz funkcije [url=http://pubs.opengroup.org/onlinepubs/009695399/functions/send.html]send[/url]. Zašto? U funkciji imaš kao argument pokazivač na polje koje želiš poslati (tj. adresu prvog elementa), te također veličina elementa u polju. Taj argument (veličina elementa) ne bi bio potreban ako bi proizvoljno dijelili polje koje se želi poslati (a pretpostavljam da ubrzava slanje, sigurnije je što se tiče čuvanja podataka koji se šalju...)
PermutiranoPrase (napisa):

I kako točno radi send()? Šalje li on npr element po element niza, ili n bajtova po n bajtova, ili pošalje odjednom 100B u prvoj rundi, pa u idućoj npr 120, pa 50, itd, svaki put koliko uspije?


Ono što sam pronašao je da je gornja granica slanja MTU.
U principu ti je najbolje napraviti probu, slati od jednog podatka pa sve više i više i gledati kako se dijele podaci koji se šalju.
Ono što (ne znam, ali) sam prilično uvjeren da se uvijek šalje višekratnik size_t iz funkcije send. Zašto? U funkciji imaš kao argument pokazivač na polje koje želiš poslati (tj. adresu prvog elementa), te također veličina elementa u polju. Taj argument (veličina elementa) ne bi bio potreban ako bi proizvoljno dijelili polje koje se želi poslati (a pretpostavljam da ubrzava slanje, sigurnije je što se tiče čuvanja podataka koji se šalju...)


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
wrathchild
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 07. 2010. (21:25:00)
Postovi: (31)16
Sarma = la pohva - posuda
= 11 - 8

PostPostano: 0:45 sub, 16. 11. 2013    Naslov: Citirajte i odgovorite

Da ne otvaram novu temu, imam problem s zadacom.
Moram spojiti dva klijenta na jedan server, i klijenti igraju igru. Radio sam:

// socket
// listen
// bind
while(1){
// accept konekcije s prvim klijentom
// accept konekcije s drugim klijentom
funkcija(sock1, sock2)
}

funkcija prima 2 socketa i s njima radi igru. Međutim, meni stvar niti ne funkcionira s najjednostavnijim primjerom: na pocetku funkcije server svakom klijentu posalje "Bok" a nakon toga while(1) [jer ce se nesto dalje dogadati nakon sto se javi klijentima]. Klijent ne primi poruku, tek kad ugasim terminal sa serverom oba klijenta dobiju poruku.
Moze netko neki savjet?
Da ne otvaram novu temu, imam problem s zadacom.
Moram spojiti dva klijenta na jedan server, i klijenti igraju igru. Radio sam:

// socket
// listen
// bind
while(1){
// accept konekcije s prvim klijentom
// accept konekcije s drugim klijentom
funkcija(sock1, sock2)
}

funkcija prima 2 socketa i s njima radi igru. Međutim, meni stvar niti ne funkcionira s najjednostavnijim primjerom: na pocetku funkcije server svakom klijentu posalje "Bok" a nakon toga while(1) [jer ce se nesto dalje dogadati nakon sto se javi klijentima]. Klijent ne primi poruku, tek kad ugasim terminal sa serverom oba klijenta dobiju poruku.
Moze netko neki savjet?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji siročići (oni koji nemaju svoj podforum) -> Računarski kolegiji Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan