[SOLUCIONADO] Generar archivo remotamente.

Iniciado por TitoPacheco, Agosto 06, 2020, 01:17:30 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 06, 2020, 01:17:30 AM Ultima modificación: Agosto 09, 2020, 05:01:02 PM por AXCESS
Buenas, estoy aprendiendo a programar hace unos meses, y tenia una duda. Hay alguna forma de generar un archivo en otra pc o en un servidor remoto?
Por ejemplo, si yo creo el archivo en la PC "a" y lo ejecuto en la PC "b", que se cree un archivo en la "a". De no ser posible si me pudieran dar alternativas a lo que me refiero se los agradeceria.

Agosto 06, 2020, 01:40:57 AM #1 Ultima modificación: Agosto 06, 2020, 01:49:08 AM por Kirari
Buenas!

Algo muy simple que se me ocurre ahora, es que el archivo que se cree en la máquina B, se envíe mediante sockets (el módulo en Python es socket: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) a la máquina A y que luego el archivo generado en B, se elimine, quedando así el fichero en A. Es algo muy sencillo de hacer.

Saludos!

-Kirari

Como lo explica el compañero, puede usar sockets y un lenguaje de programación. Por ejemplo, podríamos usar Python:

Un ejemplo usando la consola (Servidor):

Código: bash
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> server.bind(('localhost', 4848))
>>> server.listen(1)
>>> obj = server.accept()
>>> obj
(<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 4848), raddr=('127.0.0.1', 57542)>, ('127.0.0.1', 57542))
>>> (sock, addr) = obj
>>> with open('file.txt', 'wb') as fd:
...     fd.write(sock.recv(5))
...
5
>>> exit()
shell$ cat file.txt
Hola


La contraparte (Cliente):

Código: bash
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> client.connect(('localhost', 4848))
>>> client.send(b'Hola\n')
5
>>>


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Como lo explica el compañero, puede usar sockets y un lenguaje de programación. Por ejemplo, podríamos usar Python:

Un ejemplo usando la consola (Servidor):

Código: bash
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> server.bind(('localhost', 4848))
>>> server.listen(1)
>>> obj = server.accept()
>>> obj
(<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 4848), raddr=('127.0.0.1', 57542)>, ('127.0.0.1', 57542))
>>> (sock, addr) = obj
>>> with open('file.txt', 'wb') as fd:
...     fd.write(sock.recv(5))
...
5
>>> exit()
shell$ cat file.txt
Hola


La contraparte (Cliente):

Código: bash
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> client.connect(('localhost', 4848))
>>> client.send(b'Hola\n')
5
>>>


~ DtxdF

Muchas gracias, lo explicaste bastante bien, pero aun tengo una duda, si el archivo es ejecutado desde otra red no serviria el "localhost",no? Haria falta establecer una ip fija o algo asi?

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Aunque están correlacionados no se le dice ejecutar (en este caso), en cambio lo que hace ese pequeño snippet es leer el archivo 'file.txt' para enviarlo al otro extremo a posteriori.


Sobre tu cuestión sobre la dirección IP, te dejo unos enlaces que te explican un poco más algunos conceptos introductorios y quizá te ayuden en algo:

*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
*- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Resumiendo: No es necesario que sea una dirección IP estática, aunque funcionaría perfectamente también con una dirección IP dinámica. Aunque leyendo nuevamente lo que dijo, supongo se refiere a colocar la dirección IP del servidor como argumento en la tupla '.bind('<Dirección IP>', <Puerto>)' y también en '.connect(('<Dirección IP del servidor>', <Puerto a conectar>))'. Básicamente se lo explico así: Supongamos que existe un cartero (la máquina cliente) y éste necesita saber la dirección en donde enviará un paquete, en este caso nosotros (el servidor) le proporcionaremos la dirección donde vivimos (la dirección IP) y ahora los dos podrán enviarse paquetes entre sí; ok, todo bien hasta aquí, nosotros vivimos en una casa hasta que morimos por lo que nunca cambiaríamos de dirección y el cartero sabría en que lugar vivimos siempre, pero supongamos otra situación donde cada 24 horas estamos cambiando de casa, por lo tanto de dirección, lo primero se le conoce como dirección IP estática y lo segundo como dinámica, simple.

¿Quién nos proporciona esa dirección?, supongamos que sea una centro establecido en su urbanización el encargado de eso (el DHCP), el cual usted le pide una dirección, pero en el contrato está claro que tiene que renovarla cada 24 horas (dirección IP dinámica), a cambio si el centro le dice que no le importa qué dirección tenga, entonces usted mismo puede asignarse una (dirección estática) o él le brinda una y solo una.

Así que sí, dependiendo de la situación necesita colocar una dirección IP válida y que le haya proporcionado.

Nota: No soy muy bueno con las analogías y con la abstracción, aun así espero me haya entendido xD

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF