elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Envio mensaje por bloques en socket
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Envio mensaje por bloques en socket  (Leído 1,250 veces)
jorgedl

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Envio mensaje por bloques en socket
« en: 3 Octubre 2018, 16:42 pm »

Hola, necesito enviar paquetes de datos por bloques a través de un socket. Yo tengo un puntero de tipo uchar con el mensaje completo, y una variable de tipo int con la longitud del mismo.
La conexión del socket ya la tengo hecha perfectamente, solo necesito una ayuda de como lograr ir enviando el mensaje por bloques de 1024 ya que estuve probando con varios ejemplos y con ninguno pude conseguirlo.

Algo así es lo que intento resolver:

BOOL enviarMensaje( UCHAR *sSndData, UINT16 ulSndDataLen)
{

   #define SEND_MAX_SIZE       1024   
   int handle=-1;
   short retVal =-1 ;
   int totalEnviados=0;

   handle=CrearSocket(sTCPAddress,ulTCPPort);
   timeout.tv_sec = 2; //segundos
   timeout.tv_usec = 100; //microsegundos
   setsockopt(handle,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));

   timeout.tv_sec = 2;
   timeout.tv_usec = 100;
   setsockopt(handle, SOL_SOCKET,SO_PKTRCVTIMEO,(char*)&timeout,sizeof(timeout));   

   if(handle >=0)
   {
      while(totalEnviados<ulSndDataLen){
         retVal = send(handle,sSndData,SEND_MAX_SIZE,0);
         totalEnviados+= retVal;
       }
       closesocket(handle);
   }
}

Agradezco cualquier ayuda al respecto
Saludos

Jorge


En línea

OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Envio mensaje por bloques en socket
« Respuesta #1 en: 3 Octubre 2018, 17:52 pm »

Los packetes se pueden partir en la transmisión, tcp lo permite. No lo puedes controlar. Tu propio ISP lo puede hacer. Sabiendo esto. Puede que te esté capando el SO.
El kernel te duplica el buffer para dejar sitio. Y también te pone limitaciones y te establece el tamaño por defecto en:
/proc/sys/net/core/wmem_default
/proc/sys/net/core/wmem_max
/proc/sys/net/ipv4/tcp_mem

Puedes cambiarle los valores con el editor de texto.

O usa SO_SNDBUFFORCE para ignorar el cap del OS en wmem_max.


En línea

I like to test things.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Bloques
Scripting
Herzius 2 2,651 Último mensaje 22 Enero 2008, 23:35 pm
por ~[uNd3rc0d3]~
Multithread Socket (Thread per Socket)not Complete « 1 2 »
Programación Visual Basic
ntaryl 12 8,829 Último mensaje 10 Febrero 2012, 18:42 pm
por ntaryl
Máscaras y bloques de bits
Programación C/C++
loryisus 6 2,548 Último mensaje 7 Marzo 2014, 20:16 pm
por eferion
¿Qué es la Cadena de Bloques (Blockchain)?
Foro Libre
DISCIPULUS 9 5,742 Último mensaje 29 Mayo 2017, 20:52 pm
por Orubatosu
Necesito ayuda para descifrar un mensaje que nos envió un antiguo empleado.
Dudas Generales
cesarvidal 5 3,590 Último mensaje 22 Septiembre 2021, 00:08 am
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines