PDA

Ver la versión completa : necesito sus sugerencias



proteo1
31-05-2008, 17:52
Hola a todos aqui ando de nuevo.

La cuestion es que tengo un MDIForm con el siguiente codigo


Option Explicit

Private Sub MDIForm_Load()
Form1.Show
Form2.Show
Form3.Show
End Sub


y este codigo se repite en los siguientes form1, form2 y form3


Option Explicit

Dim ContenidoTextoRecibido As String

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim TextoRecibido As String
Winsock1.GetData TextoRecibido
ContenidoTextoRecibido = ContenidoTextoRecibido + TextoRecibido
If Right(TextoRecibido, 7) <> "/\Fin/\" Then Exit Sub
TextoRecibido = ContenidoTextoRecibido
ContenidoTextoRecibido = ""
'Procedimiento con el texto que se descargo
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock1.Close
Winsock1.Connect "168.15.6.X", 6584
End Sub

En el load de los form1 es donde hace la primera vez la conexion del socket

Creen que existe un problema al usar este codigo, respecto a la variable
ContenidoTextoRecibido ...
PD: la Ip es inventada pero variaria no es la misma para todos

Satanheoba
08-06-2008, 04:29
La verdad que no sabria ayudarte ya que no se Cual es el fin de lo que quieres Hacer.-

Explica un poco mejor asi pueda ayudarte.-

Salu2.-

hystd
08-06-2008, 11:40
Buenas! No utilizo VB, y desconozco algunos aspectos... pero viendo el código tampoco hay que ser un as... está claro que la variable ContenidoTextoRecibido la usas como el almacen final para ir guardando (lo vas concatenando), con lo que llega del Socket en la variable TextoRecibido, que la usas como un bufer para ir cogiendo lo que llega.

Entonces, veo algo extraño como es, asignar al bufer el contenido total (ContenidoTextoRecibido), luego limpias ContenidoTextoRecibido que es donde lo tenias todo guardado. Si has hecho el trabajo de ir guardandolo todo en ContenidoTextoRecibido, para qué lo limpias ahora? En tal caso, si en el procedimiento que usas para tratar el texto haces referencia a ContenidoTextoRecibido evidentemente no verás nada.

Personalmente las lineas:


TextoRecibido = ContenidoTextoRecibido
ContenidoTextoRecibido = ""
'Procedimiento con el texto que se descargo

Lo pondría así:

La primera linea desaparece;
'Procedimiento con el texto que se descargo, usando la variable ContenidoTextoRecibido'
ContenidoTextoRecibido="";

Un saludo

gondar_f
08-06-2008, 14:44
Siguiendo por la linea de hystd, tu tienes esto:

Dim TextoRecibido As String
Winsock1.GetData TextoRecibido
ContenidoTextoRecibido = ContenidoTextoRecibido + TextoRecibido
If Right(TextoRecibido, 7) <> "/\Fin/\" Then Exit Sub
TextoRecibido = ContenidoTextoRecibido
ContenidoTextoRecibido = ""
'Procedimiento con el texto que se descargo


pues ya haría un pequeño cambio:

Dim TextoRecibido As String
ContenidoTextoRecibido = ""
Winsock1.GetData TextoRecibido
ContenidoTextoRecibido = ContenidoTextoRecibido + TextoRecibido
If Right(TextoRecibido, 7) <> "/\Fin/\" Then Exit Sub
TextoRecibido = ContenidoTextoRecibido
'Procedimiento con el texto que se descargo

Aunque con lo poco que muestras a lo mejor ya puede que hayas inicializado la variable (que en teoría te debería funcionar, pero si esta vacía -Empty- puede darte problemas)... en otro lugar, por ello hay la opción:


Dim TextoRecibido As String
Winsock1.GetData TextoRecibido
if not(ContenidoTextoRecibido<>Empty) then
ContenidoTextoRecibido=""
End If
ContenidoTextoRecibido = ContenidoTextoRecibido + TextoRecibido
If Right(TextoRecibido, 7) <> "/\Fin/\" Then Exit Sub
TextoRecibido = ContenidoTextoRecibido
ContenidoTextoRecibido = ""
'Procedimiento con el texto que se descargo

Así si la variable no se uso nunca, pues la inicializas, y si ya fue inicializada pues no haces nada

Un Saludo

PD: hago lo de variable<>Empty y no variable=Empty, porque me encontre que esto me daba muchos problema en VBA y en VB6 también tuve un par de veces problemas con ello, por eso siempre uso la otra forma.

proteo1
09-06-2008, 20:43
Hola a todos y gracias por sus opiniones.

quizas me apresure poniendo, jejeje

el caso es que esto:


If Right(TextoRecibido, 7) <> "/\Fin/\" Then Exit Sub
TextoRecibido = ContenidoTextoRecibido
ContenidoTextoRecibido = ""

El caso es que digamos que cada HIJO recibe un archivo de 300kb o mas, y sabe que ha terminado cuando le llega al ultimo la cadena /\Fin/\ ahi es cuando se que ha terminado de llegar lo que se envio, asi que asigno la variable a otra y limpio en donde llega todo porque lo que llego, llego y ahi es donde procede todo

aqui


TextoRecibido = ContenidoTextoRecibido
ContenidoTextoRecibido = ""

Paso el contenido a la variable TextoRecibido y libro la de ContenidoTextoRecibido, para llamar a otra funcion y dejar limpia la variable por si estoy procesando o guardando lo que llego y no me preocupo de que llegen datos de mas.

en si la pregunta seria: creen que exista problema entre las variables de ContenidoTextoRecibido entre los demas HIJOS???

grax por sus comentarios se los agradesco mucho. y los considero para usar una variable menos y cargar todo en el mismo SUB

Satanheoba
10-06-2008, 14:18
Yocreo que si que vas a tener problemas ... solo prueba.. en su defecto puedes usar un modulo y ahi usas ese modulo para llamar a la variable y Obviamente solo usas una sola variable para todos los "hijos" ...

EJ:
en un modulo llamado RECIBIDO(o como quieras llamarlo) poner :


Option Explicit
Public ContenidoTextoRecibido As String

Luego en los furmularios "hijos" usas como normalmente usarias la variable "ContenidoTextoRecibido" pero llamando al modulo:


If Right(TextoRecibido, 7) <> "/\Fin/\" Then Exit Sub
TextoRecibido = RECIBIDO.ContenidoTextoRecibido
RECIBIDO.ContenidoTextoRecibido = ""


Verifica y despues dinos..
SALUDOS.-

proteo1
11-06-2008, 07:12
Yocreo que si que vas a tener problemas ... solo prueba.. en su defecto puedes usar un modulo y ahi usas ese modulo para llamar a la variable y Obviamente solo usas una sola variable para todos los "hijos" ...

hola que tal, no estoy usando ningun modulo.

el caso poniendolo de otra forma, estoy haciendo un server, que controla varios clientes y al conectarse cada uno de los clientes.

estos mandan un archivo digamos de 1 mega aprox de un KEYLOGER, entonces cada cliente manda un archivo diferente que ocupara procesar de manera independiente, asi que cada FORM1 FORM2 y FORM3 recibe archivos diferentes y en algun dado caso que se conecten los tres al mismo tiempo creen que tenga problemas con la variable ContenidoTextoRecibido que esta dada de alta en cada FORM....

para asi al recibir el archivo completo que finaliza cuando llega esto "/\Fin/\" y pueda procesarse y mostrarse.

creen que exista algun problema porque en los FORMs existe una variable del mismo nombre pero es privada porque no la usao en ningun MODULO sino solo en cada FORM....

gracias por sus comentarios se los agradesco bastantes, y todos son considerados, para poder continuar con esto :D

Marchi
21-07-2008, 08:13
creen que exista algun problema porque en los FORMs existe una variable del mismo nombre pero es privada porque no la usao en ningun MODULO sino solo en cada FORM....



Creo que te estas contestando vos mismo, si la variable es privada, no hay forma de accederla desde otro modulo o formulario.
Incluso hasta podrias declararla como public, y de esta manera accederla como Form1.ContenidoTextoRecibido sin miedo de que se modifique ContenidoTextoRecibido en Form2 o Form3.


Saludos