Vi skall skapa ett nätverksprotokoll för en stor olika data som skall skickas.
Vi kom och tänka på att själva nätverksprotokollet kan se ut såhär.
Vi har en flera olika structs som vi definerar på klienten och servern.
Klienten skickar en struck och en defined siffra vilket gör att mottagaren kan avgöra vilken struct det är. Det handlar om mottagarsidan typecastar det mottagna till den structen som angetts från defined siffran.
Protokollet kommer då att se ut liknande
c: Hello
s: hello_connection_established
c: sendstructtype 1
s: ok_send
c: [Skickar struct]
s: ok_recive_done
c: bye
s: closing_connection
Skulle detta fungera eller hur borde det se ut?
Eftersom det är så mycket olika data som skall överföras så kan det bli jobbigt att ha ett protokoll för varje struct?
Förslag önskas?
Jag hittade denna länken:
http://www.gamedev.net/community/forums/topic.asp?topic_id=297087
Där dom diskuterade att det gick men att man helst inte skulle skicka hela structs utan skicka en struct med
id, length, char[].
Men eftersom vårat system inte skall skicka större saker än en struct med kanske en x-position och en y-position. Borde man ändå dela upp packeten :S.
Som t.ex. här
struct a_msg
{
short ID;
unsigned short length;
char message[BUFFERSIZE];
int bytes_pending;
};
int SendData(a_msg * data)
{
//
// Send data to the server
//
if(isconnected)
{
nRet = send(theSocket, (char *)data, HEADERSIZE+data->length, 0);
if (nRet == SOCKET_ERROR)
{
//cout<<"socket error on send"<<endl;
closesocket(theSocket);
isconnected=false;
return -1;
}
return 1;
}
else
{
//printf("not connected\n");
return -2;
}
}
UlfTMedlem sedan maj 20018 027 inlägg
Nickemannen skrev:
Där dom diskuterade att det gick men att man helst inte skulle skicka hela structs
Jag förstod det som att man inte ska skicka objekt:
You should only be sending data across the wire. Not entire objects.
Det är ju naturligt, eftersom mottagaren knappast kan veta vilka medlemsfunktioner objekten har, etc.
Nickemannen skrev:
utan skicka en struct med
id, length, char[].
Id i structen skulle du kunna använda för att ange vad det är för typ av struct du skickar över. Dvs du skickar både struct och structtyp på samma gång. Om du bygger upp alla structtyper på ett sådant vis att du alltid har id i samma del av structen (i början, förslagsvis), kan du alltid läsa av id innan du vet vad det är du har tagit emot. Då har du sluppit ett steg i kommunikationen med servern.
PeWMedlem sedan juni 200010 432 inlägg
Där dom diskuterade att det gick men att man helst inte skulle skicka hela structs
En struct är detsamma som en sekvens med data precis som en array, fast med inbyggt 'offset'. Så det bör ju inte bereda några somhelst problem att skicka structs så länge client och server är ense med hur structen är definierad, eller hur?
Övriga tips (fr. avsnitt 6.3 och framåt):
http://www.ecst.csuchico.edu/~beej/guide/net/html/advanced.html
Jepp, tanken var den att båda sidorna skall ha en likadan struct definerad.
Tack för länken PeW skall läsa.
Är det såhär kommunikation går till eller är det stora protokoll som byggs? Där varje liten del har sitt kommando i protokollet?