[Ayuda]Estructuras y repeticiones.

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
emiliano
Mensajes: 6
Registrado: 14 Mar 2014, 17:21

[Ayuda]Estructuras y repeticiones.

Mensaje por emiliano »

Buenas,
1º post en el foro... no sabía de esta comunidad, de hecho comencé con AutoIT viendo un tuto de 13 partes en inglés (de haberlo sabido).
No se si fue el idioma o no me quedó claro como se trabaja con las estructuras.
Ejemplo, hice un programita y que funciona, pero solo 1 vez. Por ende algo mal tengo.
Ej:
El programa manda por la funcion TCP mensajitos (intenté hacerlo con archivos y por ahora me resulta imposible que funcione, supongo que será mi 2º posto eso JA)

Código: Seleccionar todo

codigo++codigo++codigo
$input = GUICtrlCreateInput("", 48, 40, 473, 21)
$MyButton1 = GUICtrlCreateButton("Enviar", 144, 72, 260, 30, $BS_FLAT)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

TCPStartup()

$ip = InputBox("Conexion", "Ingrese IP:")

$port = InputBox("Conexion", "Ingrese puerto:")

$TCPConnect	= TCPConnect($ip, $port)

While 1
  	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $MyButton1
		   $send = GUICtrlRead($input)
		   TCPSend($TCPConnect, $send)
		   $send = ""

	EndSwitch
WEnd
Osea, al hacer click en el Mybutton1 no debería ejecutarse la función que llamo, tantas veces como aprete el botón?, el while también no se si está bien, pero si se quedara lupeado ahi dentro, me tendría que mostrar el $send muchas veces, cosa que no hace...
En fin, espero se entienda
Gracias por la info...
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: [Ayuda]Estructuras y repeticiones.

Mensaje por Dany »

Bienvenido. Si debería. puedes mostrar el código completo. o que estas tratando de hacer?
  • ............................................Imagen
    ......................................Imagen
emiliano
Mensajes: 6
Registrado: 14 Mar 2014, 17:21

Re: [Ayuda]Estructuras y repeticiones.

Mensaje por emiliano »

Si no hay problema, no vi que fuera relevante, de hecho es el Gui lo que esta arriba, pero aquí adjunto el código completo.
Son 2 scripts, 1 receiver y otro de sender, la idea inicial era enviar un archivo (pero no funcionó) por lo que el fin ahora es de enviar texto (tipo chat). Ingreso ip destino, puerto y un "texto" si el receiver esta iniciado se recibe el "texto" y sale un msgbox. Esto funciona 1 vez, después cuando envío el 2º texto, nada.... (Dudo que sea el receiver el problema porque si ejecuto el script de sender 10 veces, se recibe bien los 10 mensajes..)
Codigo completo:

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 585, 443, 192, 124)
$input = GUICtrlCreateInput("", 48, 40, 473, 21)
$MyButton1 = GUICtrlCreateButton("Enviar", 144, 72, 260, 30, $BS_FLAT)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

TCPStartup()

$ip = InputBox("Conexion", "Ingrese IP:")

$port = InputBox("Conexion", "Ingrese puerto:")

$TCPConnect	= TCPConnect($ip, $port)

While 1
   Sleep(1)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $MyButton1
		 $send = GUICtrlRead($input)
		 TCPSend($TCPConnect, $send)
		 $send = ""
   EndSwitch
WEnd
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: [Ayuda]Estructuras y repeticiones.

Mensaje por Dany »

Te estaba escribiendo un ejemplo y se fue la luz (energia electrica) :smt010 :smt011 en unos minutos te dejo un ejemplo :) saludos
:smt027


EDITO:

Bueno aquí te dejo un simple ejemplo que hice.
Ejecuta Primero el Servidor. :)

Cliente:

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


Local $Form1 = GUICreate("Cliente", 335, 165, 192, 124)
Local $Button1 = GUICtrlCreateButton("Enviar", 120, 112, 89, 33)
Local $Input1 = GUICtrlCreateInput("", 40, 24, 249, 21)
GUISetState(@SW_SHOW)


TCPStartup()
Local $TCPConnect = TCPConnect(@IPAddress1, 8000)
If $TCPConnect = -1 Then MsgBox(0, "Error", "No se pudo Conectar :(")


Local $nMsg = 0
Local $iSent = 0
Local $sData = ""
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			If $TCPConnect Then TCPCloseSocket($TCPConnect)
			TCPShutdown()
			ExitLoop
		Case $Button1
			$sData = GUICtrlRead($Input1)
			If $sData <>"" Then
				$iSent = TCPSend($TCPConnect, $sData)
				If $iSent = StringLen($sData) Then
					ConsoleWrite("Datos Enviados Correctamente" & @CRLF)
				Else
					ConsoleWrite("Los Datos no Fueron enviados :(" & @CRLF)
				EndIf
			Else
				MsgBox(0, "¬¬", "Coloque algun dato en el Input Para Enviar")
			EndIf

	EndSwitch
WEnd

Servidor

Código: Seleccionar todo

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Local $Form1 = GUICreate("Servidor", 371, 217, 192, 124)
Local $Edit1 = GUICtrlCreateEdit("", 48, 24, 273, 137)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)

TCPStartup()
Local $TCPListen = TCPListen(@IPAddress1, 8000)


Local $TCPAccept = -1
Local $sData = ""

While 1
If $TCPAccept=-1 Then
	$TCPAccept=TCPAccept($TCPListen)
EndIf

if $TCPAccept then
	$sData = TCPRecv($TCPAccept, 100)
EndIf

If $sData <> "" Then GUICtrlSetData($Edit1, "Datos Recividos : " & $sData & @CRLF)

	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			If $TCPListen Then TCPCloseSocket($TCPListen)
			TCPShutdown()
			ExitLoop

	EndSwitch
WEnd

Saludos :smt027
  • ............................................Imagen
    ......................................Imagen
emiliano
Mensajes: 6
Registrado: 14 Mar 2014, 17:21

Re: [Ayuda]Estructuras y repeticiones.

Mensaje por emiliano »

Jajaja genio lo escribiste y 2 veces :smt023 ...
Ahora me voy a poner a investigar el mio porque no funciona, comparandolo con el tuyo (que como esperaba funciona correctamente). Voy a tratar de completar mi idea inicial que es la de enviar un archivo....
Gracias de nuevo... :smt003
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: [Ayuda]Estructuras y repeticiones.

Mensaje por Dany »

Para enviar un archivo no seria muy diferente.
si puedo cuando salga del trabajo escribiré un ejemplo.

Saludos
  • ............................................Imagen
    ......................................Imagen
emiliano
Mensajes: 6
Registrado: 14 Mar 2014, 17:21

Re: [Ayuda]Estructuras y repeticiones.

Mensaje por emiliano »

Nono no te molestes que ya lo tengo :smt023 , de hecho, comencé con un ejemplo que descargué que abre un navegador para seleccionar el archivo y luego hace la lectura del mismo GUI. Pero yo quería fija la ubicación y después de mucho lo logré.
El único problema que estoy teniendo es que quiero que el server reciba el archivo, lo baje y luego siga en modo escucha, pero me descarga cada 1 segundo el mismo archivo (estando parado el sender), tengo que encontrar la forma de "limpiar el caño" y que vuelva a seguir "escuchando", probé con TCPShutdown y nada, no se si lo leerá de la memoria o que...
Si se complica vuelvo a preguntar :smt024
emiliano
Mensajes: 6
Registrado: 14 Mar 2014, 17:21

Re: [Ayuda]Estructuras y repeticiones.

Mensaje por emiliano »

Por hoy fue suficiente :smt011 .... No logro que reconecte automaticamente, seguro me falta algun CloseSocket o algún refresh. Aqui dejo los 2 por si ves algo mal.
Funciona correctamente, pero cuando detengo el enviar y lo vuelvo a arrancar no retoma el envío de los datos.
Server:

Código: Seleccionar todo

Dim $iMainSocket = -1, $iSocket = -1

TCPStartup()

$iMainSocket = TCPListen(@IPAddress1,8000)

While 1
    If $iSocket = -1 Then
        $iRet = TCPAccept($iMainSocket)
        If Not @error Then $iSocket = $iRet
    Else
		 $data = TCPRecv($iSocket,4096)
		 If $data <> "" Then
			FileWrite("Log_"& @MDAY&"_"& @MON&"_"& @HOUR&"_"& @MIN&"_"& @SEC&".txt",$data)
			$iSocket = -1
			$data = ""
		 EndIf
    EndIf
WEnd

Código: Seleccionar todo

TCPStartup()
While 1
   $File = FileOpen("log.txt")
   if $File	= -1 then
	  Msgbox(0,"Error","Archivo no encontrado")
	  Sleep(10000)
   Else
	  $Socket = TCPConnect(@IPAddress1, 8000)
	  TCPSend($Socket, FileRead($File,4096))
	  TCPCloseSocket($socket)
   EndIf
WEnd
Responder