2011-05-10 2 views
0

Я новичок в сетевых концепциях и нуждаюсь в разъяснении того, как реализовать коммуникационный протокол для отправки различных типов сообщений. В настоящее время я работаю над приложением Cocoa, которое будет отправлять видео сообщения между iPhone. В настоящее время я только отправлять сообщения типа 3. Вот поток приложения мне нужно реализовать:Как определить протокол связи?

  1. Browsing доступны айфоны в сети (с помощью Bonjour)

  2. Когда клиент iPhone найден, отправить NSData "запрос контактные данные" (MessageType1)

    iPhone клиент посылает обратно экземпляр NSData с контактной информацией (MessageType2)

  3. Init новое сообщение с записанным видео, отправить выбранному контакту (MessageType3)

Когда различные типы сообщений принимаются, они должны будут обрабатываться по-разному. Я предполагаю, что один способ решить эту проблему, чтобы добавить заголовок сообщения, которые идентифицируют тип сообщения и извлечь это на стороне приемника, а затем обрабатывать как это:

if (messageType == 1) // MessageType1 
    [self sendMyContactInfo:(Contact *)ownInfo]; 

if (messageType == 2) // MessageType2 
    [self updateViewWithContactInfo:(Contact *)contactInfo]; 

if (messageType == 3) // MessageType3 
    [self sendMessageToSelectedContact:(Message *)message] 

Для создания сообщения для MessageType3, я буду сделайте это:

/* Not currently implemented */ 
NSMutableData *data = [[NSMutableData alloc] init]; 
int messageType = 3; 
[data appendBytes:messageType] 

/* Already Implemented */ 
NSData *encodedMessage = [NSKeyedArchiver archivedDataWithRootObject:message]; 
[data appendData:encodedMessage]; 

[self sendMessage:(NSData *)encodedMessage]; 

Это хороший способ сделать это? Если да, то должны ли правила протокола быть определены более формальным образом, например. в отдельном классе или что-то в этом роде? Я ищу наилучшее общее решение здесь, поэтому не обращайте слишком много внимания на мои рисунки, если есть лучший способ сделать это ...

ответ

0

Это хороший способ сделать это?

Это стандартный способ определения протокола связи. От Wikipedia article:

Обменные биты цифровых сообщений обмениваются. Биты строятся по полям, и каждое поле содержит информацию, относящуюся к протоколу. Концептуально битовая строка разделяется на две части, называемые областью заголовка и областью данных. Фактическое сообщение сохраняется в области данных, поэтому область заголовка содержит поля, имеющие большее отношение к протоколу. Передачи ограничены по размеру, поскольку количество ошибок передачи пропорционально размеру отправляемых битовых строк. Биты, превышающие максимальный блок передачи (MTU), делятся на куски соответствующего размера. Каждая часть имеет почти одно и то же содержимое области заголовка, поскольку только некоторые поля зависят от содержимого области данных (в частности, полей CRC, содержащих контрольные суммы, которые вычисляются из содержимого области данных).

Конец цитаты Википедия

Если да, то следует правила протокола определяются более формальным способом, например, в отдельном классе или что-то в этом роде?

Это зависит от вас. Это не обязательно, так как ваше приложение общается с другими копиями вашего приложения.

+0

Ницца, похоже, я был на месте без каких-либо предварительных знаний об этих вещах. Я думаю, что легкие концепции, вероятно, должны быть реализованы соответствующим образом. Спасибо, что подтвердили мою процедуру! –

Смежные вопросы