Foros del Web » Programando para Internet » Python »

Envío de datos vía socket

Estas en el tema de Envío de datos vía socket en el foro de Python en Foros del Web. Hola a todos nuevamente. Iré directo al grano. Estoy trabajando con una aplicación cliente-servidor en donde debo enviar reiteradamente varios paquetes con distinta información, del ...
  #1 (permalink)  
Antiguo 15/11/2012, 12:13
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Envío de datos vía socket

Hola a todos nuevamente. Iré directo al grano. Estoy trabajando con una aplicación cliente-servidor en donde debo enviar reiteradamente varios paquetes con distinta información, del servidor al cliente. Éste último procesa la información, etc.
Sin embargo comencé a tener errores, los paquetes estaban corruptos, no enviaban lo que yo especificaba. Me llevó un tiempo descubrir que el problema estaba en el enviar paquetes continuamente. Por ejemplo:

Código Python:
Ver original
  1. while a:
  2.     sck.send("...")

Suponiendo que el primer paquete que envia es "Hola", el segundo "6846" y el tercero "python". Pues aveces envía "Hola6846python" (en un mismo paquete), o algo parecido. Es como si hubiera una superposición de los datos enviados.

Alguien ha tenido un problema similar? Por ahora lo solucioné con time.sleep(0.1) entre el envío de cada paquete, pero espero que haya otra forma.

  #2 (permalink)  
Antiguo 15/11/2012, 13:07
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Envío de datos vía socket

Lo que pasa es que recv usa un buffer para recibir tus datos (inicialmente 4096 bytes), si el buffer se llena o la conexión se cierra entonces ya pasa tus datos.

Como los datos que envías son muy pocos es por eso que se quedan en el buffer, hasta que juntes la cantidad suficiente de datos.
  #3 (permalink)  
Antiguo 16/11/2012, 16:43
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: Envío de datos vía socket

Ah, gracias. Lo que no entiendo es por qué esperando 0.1 segundos he podido solucionar el problema, si aún así no he llegado a los 1024 bytes.

  #4 (permalink)  
Antiguo 16/11/2012, 17:40
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Envío de datos vía socket

Para eso necesitas mas conocimiento de como funcionan las comunicaciones mas a bajo nivel.

Pero la explicación es simple. El modulo socket de python define un timeout de las comunicaciones.

Entonces cuando encuentra que no hay comunicación en cierto tiempo, vacía el buffer.
  #5 (permalink)  
Antiguo 16/11/2012, 19:16
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 10 meses
Puntos: 35
Respuesta: Envío de datos vía socket

Bien, gracias!

Etiquetas: gui, socket, vía
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:00.