Ayuda

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
enricosalto
Mensajes: 4
Registrado: 15 Mar 2009, 21:10

Ayuda

Mensaje por enricosalto »

Hola gente como va bueno quisiera una ayuda con esto , yo tengo un script en AUTOIT
con 2 INPUTBOX y un boton
DE:
MENSAJE:

ENVIAR

entonces yo tengo un appserv en mi pc con un dyndns y quiero hacer q al apretar el boton enviar, en un php
me valla mostrando DE: Fulano de tal MENSAJE: Hola como va
y asi con todas las personas que usen el script quede en el mismo php

DE: Fulano de tal MENSAJE: Hola como va
DE: Fulano de tal MENSAJE: Hola como va
DE: Fulano de tal MENSAJE: Hola como va
DE: Fulano de tal MENSAJE: Hola como va

o si hay algo mas facil q al apretar el boton me mande a cierta ip
el DE: y el MENSAJE:
asi a mi me llegan todas las preguntas que puedan hacer los alumnos entienden gracias?
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Ayuda

Mensaje por Chefito »

Lo suyo es que lo hagas directamente en AutoIt, ya que para esto no necesita ningún programa externo :smt002 .
Te recomiendo que mires en la ayuda las funciones que se encuentran en Function Reference>Network Functions.

Mira los ejemplos de las funciones TCPRecv (donde está el servidor) y TCPSend (donde está el cliente).

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
enricosalto
Mensajes: 4
Registrado: 15 Mar 2009, 21:10

Re: Ayuda

Mensaje por enricosalto »

Hola , ya encontre eso el problema es q no puedo mandar un algo con la ip publica
si pongo asi

Local $szIPADDRESS = @IPAddress1

abre el script y puedo mandar (siempre estoy probando abriendo los 2 script en mi pc)

pero si pongo

Local $szIPADDRESS ="190.134.54.12"

siendo esa mi ip publica el script directamente no abre

como hago para q funcione con la ip publica??

gracias otra vez
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Ayuda

Mensaje por Jonny »

Hola

a ver, si te entendí bien...

Quieres hacer un script, en el que se tenga que introducir la persona (por ejemplo) y el mensaje que quiere enviarte ¿no?

y quieres, que esos datos te lleguen a tí, pero ¿Como?
¿Mediante Correo electrónico? o quieres verlos en tiempo real en tu pc?
lo de dyndns es un servicio de esos de redireccionamiento ip, dominios etc, no?

La verdad, es que conectar php con autoit en el caso que planteas, solo se me ocurre hacerlo con bases de datos, que si tienes Appserv tienes la ventaja de que ya tienes el mysql instalado y configurado.
Pero sinceramente, yo no lo haría así, piensa que si lo que quieres (si lo he entendido bien) es ver a tiempo real lo que te envían otras personas mediante ese script de autoit, con php tendrías que tener siempre una ventana de internet explorer o el navegador que utilices abierta, que fuera refrescando la página que te muestra los datos cada cierto tiempo.

Yo, lo haría así:

Un cliente, en el que se introdujera la persona que envía la consulta y el mensaje que quiere enviarte con el botón para enviar.

Por otro lado, un pequeño servidor, que estubiera a la espera de recibir mensajes, de manera que cuando recibiera un mensaje te apareciera éste en una ventana (en realidad esto puede hacerse de barias formas) o bien que se cree una ventana en tu pc cada vez que recibas un mensaje y la cierres tras leerlo (mientras el servidor sigue esperando más mensajes oculto) o, que hubiera una ventana permanente del servidor y cada vez que alguien te mande un mensaje éste aparezca en la ventana del programa...

Por supuesto, puede hacerse mucho más complejo (con opciones para responder, etc).

Si tienes dudas pon lo que tengas hecho de código, dí como quieres hacerlo y miraremos de ayudarte.

Salu2!
enricosalto
Mensajes: 4
Registrado: 15 Mar 2009, 21:10

Re: Ayuda

Mensaje por enricosalto »

Holas bueno lo q me esta dificultando es la IP publica ya que ya no se donde ponerla para que funcione, el codigo que estoy utilizando es uno q esta en la ayuda de autoit(que lo probe en misma PC y anda de lujos pero siempre con la ip que me da el router si coloco la ip publica me da error en el de enviar y el servidor no levanta :S

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

;==============================================
;==============================================
;SERVER!! Start Me First !!!!!!!!!!!!!!!
;==============================================
;==============================================

Example()

Func Example()
    ; Set Some reusable info
    ; Set your Public IP address (@IPAddress1) here.
;   Local $szServerPC = @ComputerName
;   Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = @IPAddress1
    Local $nPORT = 33891
    Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
    Local $msg, $recv

    ; Start The TCP Services
    ;==============================================
    TCPStartup()

    ; Create a Listening "SOCKET".
    ;   Using your IP Address and Port 33891.
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

    ; If the Socket creation fails, exit.
    If $MainSocket = -1 Then Exit


    ; Create a GUI for messages
    ;==============================================
    $GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 200)
    $edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
    GUISetState()


    ; Initialize a variable to represent a connection
    ;==============================================
    $ConnectedSocket = -1


    ;Wait for and Accept a connection
    ;==============================================
    Do
        $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1


    ; Get IP of client connecting
    $szIP_Accepted = SocketToIP($ConnectedSocket)

    ; GUI Message Loop
    ;==============================================
    While 1
        $msg = GUIGetMsg()

        ; GUI Closed
        ;--------------------
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop

        ; Try to receive (up to) 2048 bytes
        ;----------------------------------------------------------------
        $recv = TCPRecv($ConnectedSocket, 2048)

        ; If the receive failed with @error then the socket has disconnected
        ;----------------------------------------------------------------
        If @error Then ExitLoop

        ; Update the edit control with what we have received
        ;----------------------------------------------------------------
        If $recv <> "" Then GUICtrlSetData($edit, _
                $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
    WEnd


    If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)

    TCPShutdown()
EndFunc   ;==>Example

; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet
    
    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
            "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
        $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
        If Not @error Then $aRet = $aRet[0]
    Else
        $aRet = 0
    EndIf

    $sockaddr = 0

    Return $aRet
EndFunc   ;==>SocketToIP

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

;==============================================
;==============================================
;CLIENT! Start Me after starting the SERVER!!!!!!!!!!!!!!!
;==============================================
;==============================================

Example()

Func Example()
    ; Set Some reusable info
    ;--------------------------
    Local $ConnectedSocket, $szData
    ; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
;   Local $szServerPC = @ComputerName
;   Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = @IPAddress1
    Local $nPORT = 33891

    ; Start The TCP Services
    ;==============================================
    TCPStartup()

    ; Initialize a variable to represent a connection
    ;==============================================
    $ConnectedSocket = -1

    ;Attempt to connect to SERVER at its IP and PORT 33891
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

    ; If there is an error... show it
    If @error Then
        MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
        ; If there is no error loop an inputbox for data
        ;   to send to the SERVER.
    Else
        ;Loop forever asking for data to send to the SERVER
        While 1
            ; InputBox for data to transmit
            $szData = InputBox("Data for Server", @LF & @LF & "Enter data to transmit to the SERVER:")

            ; If they cancel the InputBox or leave it blank we exit our forever loop
            If @error Or $szData = "" Then ExitLoop

            ; We should have data in $szData... lets attempt to send it through our connected socket.
            TCPSend($ConnectedSocket, $szData)

            ; If the send failed with @error then the socket has disconnected
            ;----------------------------------------------------------------
            If @error Then ExitLoop
        WEnd
    EndIf
EndFunc   ;==>Example
como hago para q ese script funcione de mi pc a tu pc por ejemplo
gracias por las respuestas
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Ayuda

Mensaje por Jonny »

Hola

así por descartar
¿Has abierto un puerto (el que especifiques en tcpAcept, para que las aplicaciones puedan escuchar desde tu pc y conectarse desde fuera?...
El puerto debe apuntar a tu ip interna.

Salu2!
enricosalto
Mensajes: 4
Registrado: 15 Mar 2009, 21:10

Re: Ayuda

Mensaje por enricosalto »

Te cuento, yo estoy probando el servidor y el cliente desde la misma PC para descartar desde un principio cualquier problema con firewall puertos etc...
en la variable que le meto el valor
@IPAdrress1 (que devuelve la ip privada en mi caso 192.168.2.100)
en vez de eso no encuentro la forma de ponerle 192.134.54.12 (ej: de ip publica)
en el servidor si pongo esa ip directamente no arranca y el cliente por supuesto da error de conexion
el firewall en mi pc esta desactivado
gracias por la rapidez :D
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Ayuda

Mensaje por Jonny »

Hola

A ver ...

Si estás probando desde tu pc (conectado al router) tienes forzosamente que utilizar la ip pribada.
Ni con autoit ni de ninguna manera, podrás acceder a tu router/pc/aplicación(s) con la ip pública, ésta solo es para los accesos externos al router.

Así pues, has de utilizar la ip pribada de tu router (que tengas configurada en el tcp/ip de tu equipo) en las funciones tcpaccept() y tcpconnect()
evidentemente, aunque estés trabajando en la red interna de tu router (lan) has de especificar un puerto, pues las funciones tcp lo requieren. Diría, que este puerto ha de estar abierto (como tcp) sinó las funciones pueden fallar) (no lo se con seguridad) pero, yo abriría el puerto, total lo necesitarás cuando quieras que alguien conecte a tu aplicación...
Es lo malo que tienen los routers, que no puedes probar realmente las aplicaciones de este tipo, pues a diferencia de los modems únicamente puedes conectar a la ip pribada.

Salu2!
Responder