WinSock palīdzība
WinSock palīdzība
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.
Serveris
http://pastebin.com/mZkVtbR5
Klients
http://pastebin.com/QDgew9Ls
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.
Serveris
http://pastebin.com/mZkVtbR5
Klients
http://pastebin.com/QDgew9Ls
//OpenGL
Re: WinSock + OpenGL
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.
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.
Re: WinSock + OpenGL
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
Re: WinSock + OpenGL
kā var pārliecinaties par to vai dati ir atnakuši no tikla?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
funkcijai
if (ir atnākuši dati no tīkla)
//OpenGL
Re: WinSock + OpenGL
http://msdn.microsoft.com/en-us/library ... s.85).aspxbubu wrote:Vajag tikai pirms recv izsaukšanas pārliecināties, ka ir dati atnākuši (select fja)
Re: WinSock palīdzība
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?
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
Re: WinSock palīdzība
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...
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...
Re: WinSock palīdzība
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 ..
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
Re: WinSock palīdzība
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 ). Vajag izmantot laika funkcijas, lai ierobežotu kadru (sūtījumu) skaitu sekundē.
Re: WinSock palīdzība
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 ..
bet liekas ka brižiem kautkam nolagojot pie X pozicijas nokļuva rotacija
taka isti nav ideju.. ka pareizi sutit
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...
taka isti nav ideju.. ka pareizi sutit
//OpenGL