Foros del Web » Programación para mayores de 30 ;) » Programación General »

Tratar datos socket

Estas en el tema de Tratar datos socket en el foro de Programación General en Foros del Web. Estoy con un proyecto en visual c++ 6.0 en el que tengo que realizar una aplicación servidor que reciba paquetes TCP. Hasta ahora soy capaz ...
  #1 (permalink)  
Antiguo 20/11/2007, 06:41
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Tratar datos socket

Estoy con un proyecto en visual c++ 6.0 en el que tengo que realizar una aplicación servidor que reciba paquetes TCP.

Hasta ahora soy capaz de detectar cuando me llegan datos:
Código:
void CIFDlg::OnDataArrivalWinsock( long bytesTotal )
{
	_variant_t data, answer, type, lngt;
	CString cs;
	unsigned char ucL, c1, i, j;

	type = (short) VT_BSTR;
	lngt = (short) 64;

	m_Winsock.GetData( &data, type, lngt );		// read frame
        //blablablabla
}
Mi objetivo es poder mostrar en un CEdit los datos recibidos en formato Hexadecimal, asi que supongo que con un array de char me bastaría pero mi problema es que estoy muy pez y no me entero

Veo que lo recibido lo guarda en la variable data, que es de tipo _variant_t, que segun he leido es una clase que agrupa el tipo VARIANT.
Por mas que busco no encuentro una definición de variant y no se como tratarlo para ir mostrando cada uno de los bytes recibidos.

Última edición por clinisbut; 20/11/2007 a las 10:08
  #2 (permalink)  
Antiguo 21/11/2007, 04:00
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Tratar datos socket

Bueno, creo que ya lo tengo solucionado.
Investigando he entendido que es un variant:
Variants, SAFEARRAYS y BSTRs

Encapsulando un SAFEARRAY en el VARIANT puedo después extraer los datos facilmente como chars.

Código:
void CIFDlg::OnDataArrivalWinsock(long bytesTotal)
{
        lngt = (short) bytesTotal;
        type = (short)(VT_ARRAY|VT_UI1);
        m_Winsock.GetData( &data, type, lngt );
        int Count= data.parray->rgsabound[0].cElements;
        unsigned char *p = (unsigned char *)data.parray->pvData;

        int i;
        for(i=0; i<(int)bytesTotal; i++)
        {
                CString aux;
                aux.Format( _T("Value %c"), *p );
                MessageBox( aux );
                p++;
        }

}
  #3 (permalink)  
Antiguo 22/11/2007, 12:03
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Re: Tratar datos socket

El control WinSock es una pequeña chapucilla, podrías usar mejor las funciones de sockets Berkeley (que implementa de forma similar Windows) o directamente las de sockets Windows; en vez de usar todo ese asunto de "controles".

También podrías usar strings en vez de CStrings; conversiones C++ en vez de C, y demás cosillas.

Las casas se construyen por el tejado, es decir, aprende C++ antes de meterte con un "control" externo.
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 10:20.