Problema con Winsock y cadenas Hexadecimales (guíenme)

Iniciado por cero_kill_byte, 9 Mayo 2005, 20:36 PM

0 Miembros y 1 Visitante están viendo este tema.

cero_kill_byte

Holas a tod@s

Les cuento mi drama por si alguien tiene un consejo

Con el Control Winsock de VB 6.0 defino, abro y monitoreo un puerto UDP bajo un w98 SE ( eso esta OK)  ;) .

Me debe llegar una cadena Hexadecimal a ese puerto. Pero al recuperarla con el Metodo GetData del Winsock, me la convierte automáticamente a decimal, es decir.

me llega por Winsock la cadena Hexadecimal &HA5 &H06 &HD4

Pero cuando consulto la variable donde queda el valor, me muestra 1656212

Obviamente  no me sirve, por que quiero tratar uno a uno cada caracter hexadecimal pero me deja la cadena en decimal, además que los concatena y no se donde empieza, ni donde termina cada valor.

He intentado con todos los tipos numeros del VB, pero no hay caso.
Alguien me puede explicar como (si es que se puede hacer) leer caracter por caracter desde el buffers del puerto.

Si Alguien me puede ayudar, se lo agradecería


Slasher-K

Usa una matriz de bytes en lugar de una variable numérica. Y en lugar de GetData usa el método PeekData.

Por ej:


Option Explicit
Option Base 1

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim lpBuffer() As Byte
        Dim sHexVal$(), iCnt%
 
  ReDim lpBuffer(bytesTotal) As Byte
 
  Call Winsock1.PeekData(lpBuffer, vbArray Or vbByte, bytesTotal)

  iCnt = 1
  ReDim sHexVal$(iCnt)
 
  For i = 1 To bytesTotal
    If lpBuffer(i) = 32 Then
      iCnt = iCnt + 1
      ReDim Preserve sHexVal$(iCnt)
    End If
   
    sHexVal(iCnt) = sHexVal(iCnt) & Chr$(lpBuffer(i))
  Next
End Sub


Este código obtiene en una matriz los valores &HA5 &H06 &HD4 respectivamente, suponiendo que están separados por espacios (código ASCII 32).

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

cero_kill_byte

Gracias Slasher Keeper

pero la verdad es que no vienen separados por espacio (32)

y además como es un puerto UDP, el método peekData da el mismo resultado que el GetData; por que según lo que he leido, el PeekData sólo sirve para conexciones de tipo TCP/IP

agradezco el esfuerzo. pero debo seguir buscando  :(

Slasher-K




A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

soplo

Hola
Yo lo veo tan simple como enviar ese valor como string en vez de un valor numérico.

Un saludo
Callar es asentir ¡No te dejes llevar!

cero_kill_byte

Holas

Ambos tienen la razón, sea lo que sea que llegue por un puerto TCP/IP - UDP - Serial - Paralelo; Siempre seran caracteres...

Ya lo solucioné.

lo que YO hacía erroneamente era enviar caracteres hexadecimales pensando que así mismo llegarían.

Winsock1.senddata &HA5 & &HD4 & &H00

pero en realidad mandaba una cadena 1652120   :-[

lo que tenía que mandar era chr$(165) & chr$(212) & chr$(0)

Gracias a todos los interesados.