WinSock palīdzība

Vieta, kur parunāt par to, kas nav atsevišķi izdalīts augstāk
Message
Author
CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

WinSock palīdzība

#1 Post by CodeWolf » 04 Sep 2011, 14:42

Sveiki, vai kāds nevarētu nedaudz izpalīdzēt. Lieta tāda ka vēlos izveidot nelielu serveri un klientu.. (tā lai serveris atjaunotu X,Y pozicijias un klients vienkārši tās attēlotu ar spraitu palidzibu..)
itkā to esmu izdarijis ,bet nezinu kā pareizi ievietot kodu Update funkcijā tā lai regulāri x,y pozicijas tiktu atjaunotas un nosutitas ...
:/ + tagad palaižot serveri un klientu savienojuma bridi klienta logs vienkarši nokarās. :roll:
Serveris
http://pastebin.com/mZkVtbR5
Klients
http://pastebin.com/QDgew9Ls
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: WinSock + OpenGL

#2 Post by snake5 » 04 Sep 2011, 16:11

1. te nav nekāda sakara ar OpenGL. ;)
2. ieliec breakpointus / lieto step funkcijas debuggerim, lai noteiktu, kur tieši uzkārās klients.

Daudz gan tur laikam nav, ko meklēt, jo izskatās, ka tiek lietoti TCP socketi blocking režīmā (t.i. neatgriezīsies no recv kamēr nebūs kaut kas atsūtīts). Paņem savu tutoriāli un aizrocies līdz sadaļām par UDP un non-blocking socketiem, tad visam vajadzētu kļūt skaidrākam.

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: WinSock + OpenGL

#3 Post by bubu » 04 Sep 2011, 17:39

Nav jau ne vainas lietot soketus blocking modē un TCP protokola soketus. Vajag tikai pirms recv izsaukšanas pārliecināties, ka ir dati atnākuši (select fja), tad recv nebloķēs threadu. Tb tādā gadījumā tipiski kodu ir strukturēt šādi:

Code: Select all

if (ir atnākuši dati no tīkla)
{
   dati = nolasam no tīkla ar recv;
   apstrādājam datus;
}
daram tipisko spēles loģiku + renderēšnu

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: WinSock + OpenGL

#4 Post by CodeWolf » 04 Sep 2011, 19:54

if (ir atnākuši dati no tīkla)
{
dati = nolasam no tīkla ar recv;
apstrādājam datus;
}
daram tipisko spēles loģiku + renderēšnu
kā var pārliecinaties par to vai dati ir atnakuši no tikla?
funkcijai
if (ir atnākuši dati no tīkla)
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: WinSock + OpenGL

#5 Post by snake5 » 04 Sep 2011, 21:25

bubu wrote:Vajag tikai pirms recv izsaukšanas pārliecināties, ka ir dati atnākuši (select fja)
http://msdn.microsoft.com/en-us/library ... s.85).aspx

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: WinSock palīdzība

#6 Post by CodeWolf » 06 Sep 2011, 23:55

hmm, paldies... man radas neliels jautajums , kā var atjaunot tādu lietu ka pozicijas sutišanu...?
es itka iemetu send un recive funkcijas iekš update, itka vis strada tikai rodas tada sajuta ka viņš nevis atjauno bet gan suta pa virsu un vairak reiz parrakstot serveris un klients sak iebremzēt... Nav kads veids ka var nosutit un veco info nodzest vai ka ta?
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: WinSock palīdzība

#7 Post by snake5 » 07 Sep 2011, 10:23

Atjaunot?
Kad pozīcija tiek sūtīta, otrā galā kāds to saņem un pārraksta mainīgos. Neko īpašu tur nevajag, lai viss kaut vai tā strādātu.
Nevar vienīgi sūtīt pārāk bieži, citādi kaut kas tiešām iebremzēs...

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: WinSock palīdzība

#8 Post by CodeWolf » 07 Sep 2011, 18:08

nuu es izdariju ta ka uzliku tadu ka taimeriti...iekš update funkcijas..
int taimeris=0;
//update
taimeris++;
if(taimeris>40)
{
send("char",sizeof(..),...);
taimeris=0;
}
bet sanak ta ka ta pozicija atjaunojas tikai peec kada laika .. un izskatas ka lago itka piereizinaju klat veel laiku.. beet tas isti nepalidz -_-
jo biežak sutu jo vairak lago klients.. nez kas butu ja butu 2vi klienti,liekas ka visp nokartos ..
//OpenGL

snake5
Posts: 361
Joined: 07 Dec 2010, 03:54
Contact:

Re: WinSock palīdzība

#9 Post by snake5 » 07 Sep 2011, 19:37

Tas taimeris nav atkarīgs no laika. Kā rezultātā neko daudz nedod (atkarīgs no procesora, vislabāk gan jau strādās uz pagājušās simtgades izstrādājumiem :D ). Vajag izmantot laika funkcijas, lai ierobežotu kadru (sūtījumu) skaitu sekundē.

CodeWolf
Posts: 119
Joined: 10 Dec 2010, 19:10
Location: LV-Riga-Marupe

Re: WinSock palīdzība

#10 Post by CodeWolf » 09 Sep 2011, 00:15

mhm liekas ka atrisinaju problemu.. sizeof(char) vieta ieliku (int)strlen(char) un suutot datus nekas nebremze + dati tiek nosutiti... Tikai tagad radas cits jautajums
kā lai sadalu sūtamos objektus daļās? Piem Poziciju X nosutot ta nokļūs pie Pozicijas X?
meiģināju
salikt rindiņā .. ta lai nosutas pec kartas ..

Code: Select all

Serveri                                                            Klienta
send(player_pos untt.X..);                              reciv(player_pos ...x...
send(player_pos untt.Y..);                              reciv(player_pos ...y...
send(player_rot untt.Y.. );                              reciv(player_rot  ...y...
bet liekas ka brižiem kautkam nolagojot pie X pozicijas nokļuva rotacija :shock:
taka isti nav ideju.. ka pareizi sutit :|
//OpenGL

Post Reply

Return to “Programmēšana / Programming”