Да, вы должны сделать свой СОБСТВЕННЫЙ протокол. «составление протокола» - это то, что вы делаете сами. Что-то вроде ... По сути на стороне сервера
// 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) Что касается Wi-Fi. GameKit и большинство пакетов для удобства полностью не зависят от физического уровня: они позаботятся об этом за вас. GK будет работать нормально, независимо от того, подключены ли телефоны - bluetooth, ethernet, что угодно! На самом деле вы «не будете знать», какой физический уровень используется. (Иногда раздражает то, что вы не можете это контролировать: отпустите, пользователям все равно.)
person
Fattie
schedule
02.04.2011