¿Cómo definir un protocolo de comunicación?

Soy nuevo en los conceptos de redes y necesito una explicación de cómo implementar un protocolo de comunicación para enviar diferentes tipos de mensajes. Actualmente estoy trabajando en una aplicación Cocoa que enviará mensajes de video entre iPhones. Actualmente solo envío mensajes de tipo 3. Aquí está el flujo de la aplicación que necesito implementar:

  1. Búsqueda de iPhones disponibles en la red (usando Bonjour)

  2. Cuando se encuentra un cliente de iPhone, envíe NSData "solicitar información de contacto" (MessageType1)

    El cliente de iPhone enviará una instancia de NSData con información de contacto (MessageType2)

  3. Inicie un nuevo mensaje con video grabado, envíelo al contacto seleccionado (MessageType3)

Cuando se reciban los diferentes tipos de mensajes, deberán manejarse de manera diferente. Supongo que una forma de resolverlo es agregar un encabezado al mensaje que identifique el tipo de mensaje y extraerlo del lado del receptor, luego manejarlo así:

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

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

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

Para crear un mensaje para MessageType3, haré esto:

/* 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];

¿Es esta una buena forma de hacerlo? Si es así, ¿deberían definirse las reglas del protocolo de una manera más formal, por ejemplo, en una clase separada o algo así? Estoy buscando la mejor solución general aquí, así que no prestes demasiada atención a mis dibujos si hay una mejor manera de hacerlo ...

preguntado el 10 de mayo de 11 a las 13:05

1 Respuestas

¿Es esta una buena forma de hacerlo?

Es una forma estándar de definir un protocolo de comunicaciones. Desde el Artículo de Wikipedia:

Se intercambian cadenas de bits de mensajes digitales. Las cadenas de bits se dividen en campos y cada campo contiene información relevante para el protocolo. Conceptualmente, la cadena de bits se divide en dos partes denominadas área de encabezado y área de datos. El mensaje real se almacena en el área de datos, por lo que el área de encabezado contiene los campos con más relevancia para el protocolo. Las transmisiones tienen un tamaño limitado, porque el número de errores de transmisión es proporcional al tamaño de las cadenas de bits que se envían. Las cadenas de bits más largas que la unidad máxima de transmisión (MTU) se dividen en piezas de tamaño apropiado. Cada pieza tiene casi el mismo contenido del área de encabezado, porque solo algunos campos dependen del contenido del área de datos (en particular, los campos CRC, que contienen sumas de verificación que se calculan a partir del contenido del área de datos).

Fin de la cita de Wikipedia

Si es así, ¿deberían definirse las reglas del protocolo de una manera más formal, por ejemplo, en una clase separada o algo así?

Eso depende de usted. No es necesario, ya que su aplicación se comunica con otras copias de su aplicación.

contestado el 10 de mayo de 11 a las 18:05

Bien, parece que acerté sin ningún conocimiento previo de estas cosas. Supongo que los conceptos fáciles deberían implementarse en consecuencia. ¡Gracias por confirmar mi procedimiento! - usuario627330

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.