dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Socket

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Mar 19, 2006 12:47 pm    Post subject: Socket

Baigaa probleema ar network programmeeshanu:
Objekti:clients uz Windows XP sisteemas,serveris uz LINUX sisteemas
API:SOCKET (WinSock un berkley socket)
Kods:
Code:

bool Send(char* pBuffer,int nSize,int nClient)
{
   if (nClient>=m_nClientCount) return false;

   
      int nSent=0; //cik pavisam aizsuutiits
      while (nSent<nSize) //kameer viss nav aizsuutiits
      {
         int n=send(m_sClients[nClient],pBuffer+nSent,nSize-nSent,0); //suutam
         if (n==SOCKET_ERROR) //ja bija kljuuda,tad paartraucam
         {
            m_pApplication->Log("WinSock: Failed to send message");
            return false;
         }
         nSent+=n;
      }
   
   return true;
}


Problema:
Ja no Windows XP sisteemas suutu veestuli uz LINUX
Code:

struct SMessage
{
   short sMessageID; //message tips
   short sLength; //data length
   void* pData;
};
SMessage sMessage;
sMessage.sMessageID=0;
sMessage.sLength=sizeof(short);

short sID=3;
sMessage.pData=(void*)&sID;

Send((char*)&sMessage,sizeof(SMessage)+sMessage.sLength,nClient));

tad viss straadaa,bet ja no LINUX sisteemas uz WindowsXP,tad nestraadaa.KAAPEEC!Vai LINUX pointerus izmanto savaadaak?Kur ir problema?Meegjinaaju arii taa:
Code:

struct SMessage
{
   short sMessageID; //message tips
   short sLength; //data length
   void* pData;
};
SMessage sMessage;
sMessage.sMessageID=0;
sMessage.sLength=sizeof(short);

short sID=3;
sMessage.pData=new char(sizeof(short));
memcpy(sMessage.pData,&sID,sizeof(short));

Send((char*)&sMessage,sizeof(SMessage)+sMessage.sLength,nClient));

bet tas arii nestraadaaja.Tad kaa pie visiem sveetajiem stikliniekiem,lai aizsuutu veestuli no LINUX uz Windows XP shaadaa veidaa?

P.S. Ar "nestraadaaja" es domaaju-clients sanjem nepareizu informaaciju(serveris(LNUX) aizsuuta 3,bet clients(Windows XP) sanjem -24776).
_________________
long time; /* know C */


Last edited by elvman on Sun Mar 19, 2006 1:02 pm; edited 3 times in total
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Mar 19, 2006 12:58 pm    Post subject:

Meegjinaaju dariit taa:
Code:

short sID=3;
void* pData=(void*)&sID;
Send(pData,sizeof(short),nClient);

un tas straadaaja,taatad ir probleema ar SMessage struktuuru.Bet kaada tad ir taa probleema?
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: Sun Mar 19, 2006 1:01 pm    Post subject:

nu probleema ir tajaa, ka tu nosuuti SMessage::pData veertiibu, nevis to atminjas apgabalu uz kuru vinsh noraada.

EDIT: tb, pirmajaa koda gabalaa tu nosuuti sizeof(short)+sizeof(short)+sizeof(void*)+sizeof(short) baitus, (sizeof(SMessage)+sMessage.sLength), kuraa ietilpst SMessage struktuura un uzreiz aiz vinjas short sID, bet linux aciimredzot nenovieto abus vainiigos vienu aiz otra atminjaa un taapeec nenokopeejas sID bet kaut kaada cita veertiiba. citiem vaardiem, tu nevari kopeet SMessage struktuuru un cereet, ka nokopeesies arii taa atminja uz kuru noraada pointeri no taas struktuuras.


Last edited by GiGa on Sun Mar 19, 2006 1:10 pm; edited 1 time in total
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Mar 19, 2006 1:07 pm    Post subject:

Hmm... Laba ideja!Uz Windows XP shis variants straadaa,bet laikam LINUX (gcc),atshkjiraas.Tuuliit pameegjinaashu nedaudz savaadaak.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Mar 19, 2006 1:30 pm    Post subject:

BEIDZOT!Jaa.Tik ilgi mocijos un beigas atrisinaju.Luuk variants:
Code:

char m_pBuffer[65536];//65536-maksimums,ko SOCKET var aizsuutiit vienaa reizee


{
short sID=3;         
SMessage* pMessage=(SMessage*)m_pBuffer;//rakstam message buferii
pMessage->pData=(void*)&m_pBuffer[sizeof(SMessage)];//peec message naak bufferis
pMessage->sMessageID=MESSAGE_ID;
pMessage->sLength=sizeof(short);
memcpy(pMessage->pData,&sID,sizeof(short));

m_pNetworkSystem->Send(m_pBuffer,sizeof(SMessage)+pMessage->sLength,nClient);
}

Tas m_pBuffer netiek uztaisiits katru reizi,bet tas ir kaa viens bufferis,kuraa visu laiku tiek rakstiits.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: Sun Mar 19, 2006 2:04 pm    Post subject:

Ieteiktu izdomaat, kaa atbriivoties no liekiem 4 (vai 8 uz 64bit sisteemaam) baitiem katraa messagaa. pData ir diezgan nelietderiigi nosuutiit.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Mar 19, 2006 2:07 pm    Post subject:

Veel viena laba ideja!Nevienam tak tas pointeris nav vajadziigs.Vienkaarshi iznjemt vinju laukaa un uzreic peec message likt datus.Tas pointeris tur pilniigi nav vajadziigs.

--EDIT--
Code:

char m_pBuffer[65536];//65536-maksimums,ko SOCKET var aizsuutiit vienaa reizee


{
short sID=3;         
SMessage* pMessage=(SMessage*)m_pBuffer;//rakstam message buferii
pMessage->sMessageID=MESSAGE_ID;
pMessage->sLength=sizeof(short);
memcpy(&m_pBuffer[sizeof(SMessage)],&sID,sizeof(short)); //uzreiz peec SMessage rakstam datus

m_pNetworkSystem->Send(m_pBuffer,sizeof(SMessage)+pMessage->sLength,nClient);
}

Un lieta dariita
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Mar 19, 2006 8:57 pm    Post subject:

Kāds kompilators tika uz Windows izmantots?
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Mar 19, 2006 9:05 pm    Post subject:

Uz windows-Microsoft Visual Studio 2005 Express (8.0.50727.42)
Uz LINUX-gcc (3.4.2)
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group