Normalmente utilizo conexiones de puerto serie cableadas entre dispositivos integrados para protocolos personalizados de comando/respuesta/estado. En esta aplicación planeo usar la pila TCP/IP de microchip y el módulo Wi-Fi sin OS para intercambiar comandos y respuestas cortos (< = 100 bytes). La pila está en funcionamiento en un kit de desarrollo de ethernet de microchip y puedo hacer ping desde mi escritorio (sin usar el módulo de Wi-Fi todavía). Supongo que podría piratear ping (microchip proporciona la fuente c para la pila) y agregar los mensajes que necesito, pero estoy buscando el método correcto/más simple/mejor.Forma más sencilla para enviar mensajes cortos utilizando TCP/IP
Respuesta
Corregir/más simple/mejor no son necesariamente lo mismo. Pero si yo fuera tú, consideraría usar UDP en lugar de TCP.
UDP es un protocolo de datagrama; TCP está orientado a flujos y tiene muchos más gastos generales (y beneficios que vienen con los gastos generales). Pero el UDP coincide más con el enfoque actual orientado a bytes del paquete (orientado a paquetes) que tiene hoy.
Lo más probable es que tenga algún protocolo de nivel superior que reciba/buffers/checksums/delimits/parses la secuencia de datos que recibe del UART. Si usa UDP, puede imitar esto muy bien con una implementación ligera y ligera de UDP. Con UDP, acaba de disparar los bytes (paquetes) & cruce los dedos que llegaron al otro extremo (muy parecido a la serie).
TCP es un protocolo basado en la conexión más pesado con reenvío incorporado, reconocimientos, entrega en orden, temporizadores, algoritmos de restitución, etc. En la mayoría de los sistemas integrados que he trabajado con TCP (varias pilas diferentes), UDP es de peso ligero & supera a TCP en términos de tamaño de código & rendimiento.
Además, no olvide que TCP se utiliza como columna vertebral de Internet; algunos paquetes pasan a través de una docena o más de saltos (enrutadores/puertas de enlace) en ruta hacia el destino final. Hay muchos lugares para que los paquetes se eliminen, por lo que TCP maneja una gran cantidad de detalles desordenados de forma transparente. Supongo que en su sistema/situación, estamos hablando de una LAN (todos en el mismo cable) y la transmisión será bastante confiable ... por lo tanto, la sobrecarga TCP no es realmente necesaria.
Hay momentos en que los beneficios de TCP justifican la sobrecarga, pero a partir de lo que ha escrito creo que debería considerar la configuración básica de un datagrama UDP. Simplemente google "simple udp example" y verás la estructura básica. Por ejemplo, here is a simple UDP client/server example usando solo 43 líneas (servidor) y 30 líneas (cliente).
Respuesta algo errónea. El riesgo de UDP de entrega de paquetes y pedidos fuera de servicio es sustancialmente diferente de las condiciones normales en una línea serie, que TCP emula mucho más de cerca. Los principales problemas con TCP son la conexión de estado completo (la reconexión se implementa correctamente) y el retardo de bloqueo de nagle difícil de desactivar en el extremo del PC del cliente que puede insertar retrasos de 200 ms en la comunicación de consulta/respuesta.Si no puede tolerar eso, entonces la implementación de su propia capa de confiabilidad sobre el UDP vale la pena; si puede, TCP será un reemplazo directo más directo para el serial. –
@Chris en una red conmutada a una carga razonable UDP estará bien. Un simple paquete de ACK cubrirá el 99% de los casos que Jack necesita. Gran base instalada de producto, en todo el mundo. También tolera los enlaces de radio mejor. –
No debe cometer el error de diseñar en torno a una suposición que el protocolo subyacente explícitamente no garantiza. Si va a utilizar UDP, debe poder recuperar los paquetes perdidos y mal ordenados, sin importar cuán poco probable puedan parecer en su red de prueba. –
Cuando tiene una pila TCP/IP, debe proporcionar una función send() para enviar algunos mensajes de datos.
Algunos dispositivos pequeños vienen solo con una implementación simple de UDP/IP, ya que esto es mucho más simple. Si no necesita el control de secuencia y la confiabilidad de TCP, podría considerar usar UDP para enviar mensajes cortos. Esto es mucho mejor para piratear los mensajes ICMP.
Pero si necesita la comodidad y la fiabilidad del protocolo de flujo TCP, no reinvente esto en base a IUDP. Usualmente no puedes hacerlo mejor, de manera más eficiente y con menos esfuerzo.
- 1. Forma más sencilla de crear un HWND
- 2. red TCPIP con C#
- 3. Raíles más cortos "time_ago_in_words"
- 4. forma más limpia de combinar dos cortos a un int
- 5. Forma más sencilla de enviar correos electrónicos con Ruby on Rails
- 6. ¿Cuál es la forma más sencilla de muestrear continuamente desde la línea de entrada utilizando C#
- 7. condicionales más cortos en js
- 8. ¿Existe alguna forma sencilla de detener procesos utilizando Windows PowerShell?
- 9. ¿Cómo puedo enviar mensajes más grandes a través de WebSocket?
- 10. ¿Forma más sencilla de publicar en Zeroconf/Bonjour?
- 11. ¿Forma más sencilla de agregar la cookie/variable XDEBUG_SESSION_START?
- 12. forma más sencilla de consulta XML en Java
- 13. forma más sencilla de insertar Perl en html
- 14. Symfony2: forma más sencilla de obtener las direcciones URL REST
- 15. Git: forma más sencilla de aplastar compromete el maestro
- 16. Forma más sencilla de implementar archivos PDF en Tridion 2011
- 17. ¿Hay alguna forma más sencilla de hacer esto?
- 18. ¿Una forma más sencilla de verificar los parámetros?
- 19. forma más sencilla de comprobar si hay espacios en ruby
- 20. forma más sencilla de repetir un video en un MediaElement
- 21. forma más sencilla de gráficos 3D superficie dada puntos 3d
- 22. forma más sencilla de analizar una fecha en Javascript
- 23. ¿Cómo puedo aprovechar de forma más efectiva los núcleos múltiples para cálculos cortos en .NET?
- 24. Cambiar ID en forma sencilla
- 25. ¿Cuál es la forma más sencilla de mostrar httpServletResponse.sendError (403, "Mi Mensaje") Estado de JSTL
- 26. Enviar mensajes privados a amigos
- 27. tcpip Handshake de 3 vías
- 28. Forma más sencilla de usar openid como autenticación para contenido estático
- 29. ¿Forma más sencilla de hacer coincidir una matriz de cadenas para buscar en Perl?
- 30. forma más sencilla para iniciar un nuevo proceso/hilo en PHP
Qué hardware/kit está usando por curiosidad. como también estoy interesado en hacer algo similar. –