Forum » Programiranje » [C] UDP
[C] UDP
Mediator ::
Delam program Krizci Krozci v Cju. Zgleda pa nekako tako: Dva klienta se povezeta na server, ki posreduje podatke od enega odjemalca do drugega.
Problem pa pride ko iz serverja s funkcijo sendto() pošiljam podatke klientom, mi vedno ta pošlje tistemu od katerega je nazadnje prejel podatke..
npr.
//sprejmemo podatke od prvega odjemalca
n = recvfrom(vticnica , polje , 255 , 0 , (struct sockaddr *)&client , &velikostC1);
client1 = client;
//sprejememo podakte od drugega odjemalca
n = recvfrom(vticnica , polje , 255 , 0 , (struct sockaddr *)&client , &velikostC1);
client2 = client;
//##############################################################
tukaj se zdaj zaplete s tole kodo:
n = sendto(vticnica , polje , strlen(polje) , 0 , (struct sockaddr *)&client1 , velikostC1);
mislim poslat neke podatke na prvi klient vendat mi vedno poslje na tistega, kateri mu je poslal podatke kot drugi.
Mi lahko kdo pove v cem je fora?
Najlepša hvala!
Problem pa pride ko iz serverja s funkcijo sendto() pošiljam podatke klientom, mi vedno ta pošlje tistemu od katerega je nazadnje prejel podatke..
npr.
//sprejmemo podatke od prvega odjemalca
n = recvfrom(vticnica , polje , 255 , 0 , (struct sockaddr *)&client , &velikostC1);
client1 = client;
//sprejememo podakte od drugega odjemalca
n = recvfrom(vticnica , polje , 255 , 0 , (struct sockaddr *)&client , &velikostC1);
client2 = client;
//##############################################################
tukaj se zdaj zaplete s tole kodo:
n = sendto(vticnica , polje , strlen(polje) , 0 , (struct sockaddr *)&client1 , velikostC1);
mislim poslat neke podatke na prvi klient vendat mi vedno poslje na tistega, kateri mu je poslal podatke kot drugi.
Mi lahko kdo pove v cem je fora?
Najlepša hvala!
- spremenilo: snow ()
Gundolf ::
Ja, vsebino pointerja hočeš kopirat kar z operatorjem =.
Vsebino client pointerja moraš skopirat nekam drugam, ker se očitno nahaja v nekem statičnem bufferju in se pointer nanj med zaporednimi klici recvfrom ne spreminja.
Vsebino client pointerja moraš skopirat nekam drugam, ker se očitno nahaja v nekem statičnem bufferju in se pointer nanj med zaporednimi klici recvfrom ne spreminja.
NoUse4AName ::
UDP za to ni primeren. Paketi se vedno zgubljajo na internetu in UDP ne zagotovi da bo paket v resnici prišel na drugo stran. Za to se uporabi TCP.
BigWhale ::
UDP je za razne igre povsem primeren. Sploh tam kjer rabis hitro komunikacijo in ti ni nujno, da cisto vsak paket pride na drugo stran
NoUse4AName ::
Seveda za večje igre kjer se podatki pošiljajo konstantno. Za takšne preproste špile pa nima smisla da konstantno pošiljaš update, ampak samo kadar pride do nekega dogodka.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c] ne sprejme UDP paketaOddelek: Programiranje | 989 (577) | slovencl |
» | SMTP v c -juOddelek: Programiranje | 2127 (1268) | BigWhale |
» | Delo z omrezjem v linuxuOddelek: Programiranje | 1303 (1149) | CCfly |
» | C: connect() funkcija, kako nastaviti timeoutOddelek: Programiranje | 1782 (1563) | fefko-the-bulldog |
» | Casovni problem v C/C++Oddelek: Programiranje | 1258 (1159) | sid_dabster |