Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: cobein en 6 Junio 2008, 15:00 pm



Título: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: cobein en 6 Junio 2008, 15:00 pm
Bueno la verdad soy MUY malo explicando asi que voy a tratar de hacer lo mejor posible.

Hay una duda y/o problema recurrente, como enviar e interpretar instrucciones usando winsock, voy a intentar mostrar una tecnica muy simple de hacerlo utilizando CallByName a ver si terminan las preguntas y PMs con respecto a este tema.

En un Form
Código
  1. Option Explicit
  2.  
  3. Private Const DELIMITER As String = "|" ' delimitador para separar instrucciones
  4.  
  5. Private Const inst_MSG  As String = "inst_MENSAJE"  'nombre de nustra instruccion
  6. Private Const inst_BEEP As String = "inst_BEEP"     'nombre de otra instruccion
  7.  
  8. Private Sub Form_Load()
  9.  
  10.    'esto es simplemente para imitar el arrivo de datos
  11.    TestDataArival inst_MSG & DELIMITER & "Hello"
  12.    TestDataArival inst_BEEP
  13.    TestDataArival inst_MSG & DELIMITER & "Bye Bye"
  14.  
  15. End Sub
  16.  
  17. 'sData seria la variable con los datos que llegaron del socket
  18. Private Sub TestDataArival(sData As String)
  19.    Dim cInstInt    As New cInstructionInterpreter
  20.  
  21.    'Vemos si la funcion tiene o no parametros
  22.    If UBound(Split(sData, DELIMITER)) > 0 Then
  23.        'llamamos a la funcion con parametros
  24.        CallByName cInstInt, Split(sData, DELIMITER)(0), VbMethod, sData
  25.    Else
  26.        'llamamos una funcion sin parametros
  27.        CallByName cInstInt, Split(sData, DELIMITER)(0), VbMethod
  28.    End If
  29. End Sub
  30.  

bueno en el primer code lo que vemos es muy simple tenemos 3 llamadas a TestDataArival pasandole unos parametros que en este caso serian nustras instrucciones  o comandos a ejecutar. la estructura del mensaje es simple [instruccion/delimitador/dato/.../delimitador/dato] en este caso los declare como constantes para  evitar errores y facilitar su modificacion (nada misterioso hasta aca)

en la funcion TestDataArival, lo primero que vemos es [ Dim cInstInt    As New cInstructionInterpreter] simplemente creamos una instancia de nuestra clase, luego un simple if que va a llamar a CallByName de 2 maneras diferentes dependiendo de si tenemos o no datos para pasarle a la instruccion

En una clase (yo la llame cInstructionInterpreter)
Código
  1. Option Explicit
  2.  
  3. Private Const DELIMITER As String = "|"
  4.  
  5. Public Sub inst_MENSAJE(ByVal sData As String)
  6.    Dim svData() As String
  7.  
  8.    If SplitData(sData, 1, svData) Then
  9.        MsgBox svData(1)
  10.    End If
  11.  
  12. End Sub
  13.  
  14. Public Sub inst_BEEP()
  15.    Call Beep
  16. End Sub
  17.  
  18. 'funcion generica para dividir y validar los datos
  19. Private Function SplitData( _
  20.    ByVal sData As String, _
  21.    ByVal lExpectedParams As Long, _
  22.    ByRef svData() As String) As Boolean
  23.  
  24.    svData = Split(sData, DELIMITER)
  25.  
  26.    If UBound(svData) >= lExpectedParams Then
  27.        SplitData = True
  28.    End If
  29.  
  30. End Function
  31.  

Bueno la clase en si tampoco tiene mucho, 2 funciones declaradas como publicas que son nustros comandos, los nombres de estas funciones tienen que coincidir con los que utilizamos para llamarlar  y una tercera que es privada simplemente para dividir y validar los datos.

bueno para los que no tienen idea de como usar CallByName aca les dejo unos links

http://msdn.microsoft.com/en-us/library/chsc1tx6(VS.80).aspx

http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/153-callbyname.htm
 
Si alguno quiere agregar algo para hacer esto mas claro que lo haga sin problemas se que puede ser un poco confusa mi explicacion.

Espero que sea util.


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: skapunky en 6 Junio 2008, 15:04 pm
Dos cosillas que no tienen importancia...

1º para que declarar una constante "Delimiter" si es mas corto escribir "|".

2º La función beep juraria que no hace falta llamarla con un call, poniendo Beep deberia bastar.


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: cobein en 6 Junio 2008, 16:43 pm
[en este caso los declare como constantes para  evitar errores y facilitar su modificacion]

Este ejemplo es solamente una guia para poder demostrar como es la "tecnica", pero en un programa mas complejo seria muy molesto y se prestaria a errores  tener que modificar absolutamente todos los delimitadores a mano en vez de modificar 1 constante si se diera el caso de necesitarlo.

Call o no Call esa es la cuestion, hace alguna diferencia? NO

No entiendo este tipo de acotaciones... es como hacer un post porque alguien declaro una variable llamandola "i" y a mi me gustaria que se llame "j".


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: SKL (orignal) en 6 Junio 2008, 17:48 pm
1 costa, porque dice "TestDataArival inst_MSG & DELIMITER & "Hello""

a mi me gusta que diga HOLA MUNDO  :P


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: skapunky en 7 Junio 2008, 01:13 am
Citar
No entiendo este tipo de acotaciones... es como hacer un post porque alguien declaro una variable llamandola "i" y a mi me gustaria que se llame "j".

No es lo mismo y lo sabes....poniendote así de paso puedes declarar 50 constantes con 50 simbolos...

Una de las grandezas de la buena programación és la optimización.

- Bueno no tiene importancia, no hace falta que te lo tomes a mal, cada uno programa como quiere. Pero me da pena ver en estos últimos tiempos gente así en el foro que va de sobrada y con mal humor ya que casualmente, entre el post de arriva de este y el tuyo sois justamente los dos usuarios que se rien de la peña y tienen poca educación. En fin que tengais suerte en vuestras andanzas.


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: cobein en 7 Junio 2008, 01:46 am
Sabes algo, yo no voy de sobrado ni nada, estoy haciendo un aporte y punto, en primera instacia no entiendo el fin de tu comentario, si vas a decir algo por lo menos que sea con razon.

Porque no declararias el delimitador como una constante? que veneficios te trae? ninguno al contrario posiblemente cause mas problemas que otra cosa aparte si hablas de optimizacion me imagino que sabes que VB se maneja mucho mas rapido las constantes.

Bueno no voy a discutir mas, al parecer es mas facil criticar que aportar.


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: ~~ en 7 Junio 2008, 01:58 am
Creo q con optimizar se referia a la hora de programar, por q "DELIMITER" es largo de escribir, eso si, una constante da menos problemas si se kiere modificar el code

Pero en fin, no discutamos por una "tonteria", ciertamente skapunky tiene su parte de razón, pero weno, aki lo importante es el apote asi q centremonos en el source y dejemonos de discusiones, q luego el ema se desvirtua ;)

Salu2


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: SKL (orignal) en 7 Junio 2008, 03:11 am
yo creo, que al pedo criticaron, ya que es un puto aporte, despues lo cambias a tu gusto...

hay algunos giles que aportan sus lindos troyanos y son una mugre!, no saben ni declarar variables y hacen troyanos con los manuales pedorros que postean aca!

tambien hay muchos que nisiquiera saben programar y ponen sus codes... y por un DELIMITER se hacen problema?

PESIMO, la verdad!

sl2


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: Yekka en 7 Junio 2008, 04:07 am
De verdad, 100% sincera, quiero aprender a programar con los codes de skullsp, él es el mejor programador que he visto  por acá, es capaz de diferenciar la mugre de los demás codes y no aprende de nadie, ¿que tendré que hacer para ser como él? aa ya se, empezare a comportarme con esa linda persona, de seguro así aprenderé mucho!!

Me haré un userbar que diga: skullsp Fan, ¿qué color le pondré? bueno eso no importa ahora, voy de una vez a hacerla, besos...



Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: SKL (orignal) en 7 Junio 2008, 04:27 am
De verdad, 100% sincera, quiero aprender a programar con los codes de skullsp, él es el mejor programador que he visto  por acá, es capaz de diferenciar la mugre de los demás codes y no aprende de nadie, ¿que tendré que hacer para ser como él? aa ya se, empezare a comportarme con esa linda persona, de seguro así aprenderé mucho!!

Me haré un userbar que diga: skullsp Fan, ¿qué color le pondré? bueno eso no importa ahora, voy de una vez a hacerla, besos...




jajajaja, que gracioso, sos tan activo en el foro que es la primera vez que te veo y no aporto mis codigos porque la verdad no vale la pena, con tan solo mirar este post me doy cuenta de la clase de lammers que hay y yo no aprendi con un profesor ni con un foro, aprendi solito bajando cosas de los cybers y practicando en mi casa sin internet, y la verdad, me considero mejor que algunos de por aca...

y ni vale la pena discutir con vos, parte que te metes si a vos no te dije nada!


Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: Yekka en 7 Junio 2008, 04:38 am
No!! pero si yo quiero aprender de vos!! sos un dios para mi, ni el pibe!!
Citar
y ni vale la pena discutir con vos, parte que te metes si a vos no te dije nada!

Con lo que a la cita se refiere, yo no veo la diferencia de tu post con el mio hee!

Saludos  ;)



Título: Re: sockets e interpretacion de instrucciones (mini tuto?)
Publicado por: LeandroA en 7 Junio 2008, 05:25 am
Dos cosillas que no tienen importancia...

1º para que declarar una constante "Delimiter" si es mas corto escribir "|".

2º La función beep juraria que no hace falta llamarla con un call, poniendo Beep deberia bastar.

a ver, si dejan de poner pabadas

esto es un tuto, imaginate que yo en un tuto pongo esto

Código:
SendMessage Me.hWnd, &HA1, 2, 0&

bueno, me decis que carajo hice?,que aprenderias a copiar y pegar nada mas, ahora si yo pongo

Código:
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2

SendMessage Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&

y bueno con lo del Call o no Call, si no lo pusiste me parece muy bien y si lo pusiste tambien. no hay diferencia.

y bueno para no poner un post al pedo, acoto un dato mas al post para quienes utilizen winsock

nunca hagan algo como esto

Código:
Winsock1.SendData "Nombre" & DELIMITER & "Leandro"
Winsock1.SendData "Apellido" & DELIMITER & "Ascierto"
porque llegaria algo como esto

Código:
Nombre|LeandroApellido|Ascierto

Tampoco hagan esto
Código:
Winsock1.SendData "Nombre" & DELIMITER & "Leandro"
DoEvents
Winsock1.SendData "Apellido" & DELIMITER & "Ascierto"

hay varias formas de evitar esto una forma seria enviar un dato crear un bucle y cuando se cumpla el evento sendcomplete liberar el bucle y enviar el siguiente dato.
o bien crear un delimitador mas, almacenar todos los datos en una variable, luego enviar el tamaño de la variable y una vez llegado al receptor una data del tamaño de esta, separar los datos.
o con un metodo ping pong, dependiendo cada caso.

Saludos y no peleen