Ver la versión completa : necesito sus sugerencias
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.-
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.
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.-
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
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