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 | 1093 (681) | slovencl |
| » | SMTP v c -juOddelek: Programiranje | 2259 (1400) | BigWhale |
| » | Delo z omrezjem v linuxuOddelek: Programiranje | 1426 (1272) | CCfly |
| » | C: connect() funkcija, kako nastaviti timeoutOddelek: Programiranje | 1969 (1750) | fefko-the-bulldog |
| » | Casovni problem v C/C++Oddelek: Programiranje | 1362 (1263) | sid_dabster |