Да, вы должны сделать свой собственный протокол. «составление протокола» - это то, что вы делаете сами. Нечто подобное ... По существу на стороне сервера
// the message arrives and you then do this...
[data getBytes:&getMe length:sizeof(CommsProt)];
тогда как на стороне клиента для отправки сообщений вы делаете это ...
NSData * data = [NSData dataWithBytes:&sendMe length:sizeof(CommsProt)];
// ...now send that data using GameKit or whatever system you end up with
и вы определяете свой протокол - по крайней мере, фрагменты данных - как это:
typedef struct _CommsProt
{
BOOL happyThing;
someThings wotJustHappened;
float happyValue;
float anotherHappyValue;
// etc
}
CommsProt;
Если вы новичок в GK, помните об этом критическом совете ...
Клиент / сервер GKSessions
Это также может помочь ...
Самый эффективный способ создания сетей на Mac / iPhone?
Некоторые полезные заметки ...
(i) «клиент» и «сервер» означают ничего . Вы сможете отправлять сумки с информацией (например, «CommsProt» выше) в любом направлении. Если вы хотите придумать конечный сервер и сослаться на него как на сервер (особенно если у вас есть тип концентратора), это нормально. Но это только в твоей голове. (Кстати, обычно вы можете использовать разные структуры данных в каждом направлении, это прекрасно.)
(ii) Относительно розеток. Если вы сильно вовлечены в работу с сетью, вам придется иметь дело с сокетами и написать свой собственный код сокетов. Однако весьма вероятно, что вы можете выбрать сетевой уровень, где вам даже не придется произносить слово «сокеты»! Например, GameKit + Bonjour полностью позаботятся о том, чтобы обрабатывать сокеты, и эта комбинация решает другую невероятно сложную проблему , которая НАХОДИТ одного из ваших клиентов / серверов. Если вы новичок, я пока рекомендую вам полностью отложить сокеты и использовать систему, такую как GameKit (или что-то подобное в Windows) для сетевого уровня.
(iii) Действительно, ВПЕРВЫЕ просто используйте что-то невероятно простое, например GameKit, пока вы выясните свой протокол и все другие головные боли . Позже, если необходимо, вы можете переписать сетевой уровень или переключиться на другой пакет , о котором вы слышали. К счастью, все, вплоть до приведенных выше примеров кода, останется неизменным, изменится только сетевой уровень.
(iv) Относительно WiFi. GameKit и большинство удобных пакетов абсолютно не зависят от физического уровня: они позаботятся об этом за вас. ГК будет работать нормально, но телефоны подключены - Bluetooth, Ethernet, что угодно! На самом деле вы «не будете знать», какой физический уровень используется. (Иногда раздражает, что вы не можете контролировать это: отпустите, пользователям наплевать.)