Parasti sūtāmo informāciju saraksta vienā baitu buferī un to sūta uzreiz - ar vienu send'u. Parasti tajā iekļauj arī paketes tipu, lai zinātu, kas ir atnācis. Ignorējot little/big -endian atšķirības, vienkāršots kods izskatītos šādi:
Code: Select all
char buffer[100];
char* p = buffer;
*p++ = 1; // 1 = pozīcija, rotācijai lieto kautko citu, piemēram 2, kautkas cits, piemēram iziet no spēles nozīmētu 3, utt
memcpy(p, position.X, sizeof(position.X); p += sizeof(position.X);
memcpy(p, position.Y, sizeof(position.Y); p += sizeof(position.Y);
memcpy(p, position.Z, sizeof(position.Z); p += sizeof(position.Z);
int buffer_size = p - buffer;
send(socket, buffer, size);
Ja interesē, tad lūk kods kā es to darīju Squares 3D spēlei:
faili, kuri apstrādā datu ielikšanu/izņemšanu baitu buferī: packet.h, packet.cpp.
faili, kuri atbild par tīkla baitu bufera sūtīšanu/saņemšanu: network.h, network.cpp (jāskatās Network::update un Network::processPacket metodes.
Kods gan nav īpaši glīts (tika sasteigts pēdējās Indago 2k6 dienās), un netiek izmantoti tīri BSD soketi pa tiešo. Es lietoju enet bibliotēku, kas nodrošināja uzticamu UDP protokolu. Bet principi paliek līdzīgi - piekonektējies, un sūti datus, vai piebindojies un saņem datus.