Controlar PC desde otro PC

Hola:

Tengo la idea de hacer dos programas en cada PC controlado mediante Internet y puerto serie.

1- EL PC1 hago la Interfaz de control para controlar por vía Internet mediante button (botones) el otro programa del PC que ahí está el PIC16F84A.

2- El PC2 tiene otro programa o Interfaz que puede controlar el puerto serie donde está conectado el PIC. Se controla como puedes ver en este vídeo...

YouTube - RS232 con PIC 16F84A y Visual C#

...con la diferencia que yo lo quiero hacer mediante control por IP y que ustedes sean capaces de controlarlo desde sus casas mientras ves como se mueve una webcam por poner un ejemplo.

Ahora la pregunta. ¿Con Visual C# se puede hacer esto?

Aquí hay un ejemplo directo de una Interfaz básico con su código fuente, conectado al puerto serie. En realidad esta Interfaz no tiene que ir con el puerto serie, sólo la conexión a Internet mediante una IP que debemos conocer para poder llegar al PC2 que si se puede conectar al puerto serie.

Las órdenes a enviar al PC2 para el puerto serie es algo parecido a esto.
Código:
          byte[] mBuffer = new byte[1];  
            mBuffer[0] = 0x20; //ASCII letra "Espacio".  
            serialPort1.Write(mBuffer, 0, mBuffer.Length);

pc1.jpg


pc2.jpg



Necesito información y cómo se programa. Poco a poco lo intentaré, al menos como se envía esta trama de bytes en hex para que lo entienda el PC2 desde el PC1. De momento sigo buscando en www.google.com


En resumen:

Sólo necesito introducir la IP desde PC1-Cliente, para conectar al PC2-Servidor. Si se conecta, el PC2-Servidor envía al PC1-Cliente un mensaje de bienvenida, por ejemplo:

"Bienvenido a PC2".

A partir de ahí, al pulsar un botón del PC1-Cliente, envía tramas y/o string o lo que sea al PC2-Servidor para que ejecute las ordenes hacia el serialPort1.
Si todo sale bien, puedo controlar el PIC16F84A por el puerto serie.

Espero que esto no sea tan complicado como parece.

¿Sugerencias?

Un cordial saludo.
 
Lo que necesitas es crear una conexión en base a sockets.

Ya tienes la mayoria de los conceptos, así que el resto solo es codificar.

Te recomiendo el siguiente libro.

Network programming in .NET de Fiach Reid.

Esta bastante completo, facil de entender y con sus respectivos ejemplos que se pueden descargar desde la web del autor.
 
cristian_elect dijo:

Ese software no lo consigo y dejé la web por ello hace meses.

Aún así gracias.

fernandoae:
Gracias, es mejor el
http://www.dyndns.com/

Lo tenía en cuenta, porque he montado web y foros de prueba hace años con windows y Linux a ver que pasa.

Información que he visto por ahora es pero no entiendo nada.
http://www.eggheadcafe.com/software/aspnet/34123283/manual-redes-sockets-en.aspx
http://www.vitucho.información/detallearticulo.aspx?ca=7
http://elvex.ugr.es/decsai/csharp/distributed/remoting.xml
http://www.aztekmindz.org/2008/07/03/sockets-c-cliente-servidor/
http://foro.noticias3d.com/vbulletin/showthread.php?p=2593836#post2593836


Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;


namespace ClienteBF
{
    
    public partial class Form1 : Form
    {
        public static Socket client;

        public Form1()
        {
            InitializeComponent();
            
        }

        private void miPanel_Paint(object sender, PaintEventArgs e)
        {

        }

        private void btnConectar_Click(object sender, EventArgs e)
        {
            //Declaro variables
            int recv;

            byte[] data = new byte[1024];  //Buffer de recepción y envío de los datos
            string input, stringData;

            //Preparo los datos (IP y puerto) del servidor al que me voy a conectar
            //La clase IPEndPoint representa un extremo de red como una dirección IP y un número de puerto. 
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.107.171"), 1234);

            //La clase Socket implementa la interfaz de sockets Berkeley (Creo el Socket)
            client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //CONECTO mi socket (cliente) al servidor definido por "ipep"
            //Try-Catch se usa en el caso de que un método pueda devolver excepciones
            //Connect puede devolver una excepción si es imposible conectar al servidor que queremos
            try
            {
                //Connect es un método de la clase Socket
                //Establece una conexión a un host remoto
                client.Connect(ipep);
                miTextBox.Text = "Conectado a 192.168.107.171 por el puerto 1234";
            }
            catch (SocketException error)
            {
                //Si existe algún error al conectar informaciónrmo al usuario
                miTextBox.Text = "Imposible conectar con el servidor:"+ error;
                return;
            }

            //Desactivo el botón Conectar y activo el botón Desconectar
            btnDesconectar.Enabled = !btnDesconectar.Enabled;
            btnConectar.Enabled = !btnConectar.Enabled;
        }

       private void btnDesconectar_Click(object sender, EventArgs e)
        {
            //Finalizo conexion con el servidor
            client.Shutdown(SocketShutdown.Both);
            client.Close();

            miTextBox.Text = "Desconectado del Sevidor";

            //Desactivo el botón Conectar y activo el botón Desconectar
            btnDesconectar.Enabled = !btnDesconectar.Enabled;
            btnConectar.Enabled = !btnConectar.Enabled;
        }
        
    }
}

Cualquier información que encuentre mejor que mejor, con la suma de todo, quizás podamos hacer algo.

Hay de dos tipos que quiero hacer, pero sólo un ame importa:
Control sobre escritorio y el otro método control por vía Web llamado .net remoting.

Saludos
 
Meta, muy buen proyecto. Voy a ver si consigo información para ayudarte en algo. Es algo parecido a lo q tenia en mente hace bastante. Conosco una web q permite el control del escitorio de forma remota, no me acuerdo el nombre pero lo puedo conseguir y se puede averiguar como funciona.

Saludos!

Pablo

EDIT: Creo q lo mejor seria conseguir el codigo para conectar las dos pcs y el paso de información.. de ahi moficarlo para q los datos vayan al pic por puerto serie. (no tengo mucha idea en programacion pero todo se aprende )
 
pablovila dijo:
Meta, muy buen proyecto. Voy a ver si consigo información para ayudarte en algo. Es algo parecido a lo q tenia en mente hace bastante. Conosco una web q permite el control del escitorio de forma remota, no me acuerdo el nombre pero lo puedo conseguir y se puede averiguar como funciona.

Saludos!

Pablo

Por si te acuerdas, te lo agradezco. Eso si, cuando acabe el proyecto, haré un manual como estos http://electronica-pic.blogspot.com/

EDIT: Creo q lo mejor seria conseguir el codigo para conectar las dos pcs y el paso de información.. de ahi moficarlo para q los datos vayan al pic por puerto serie. (no tengo mucha idea en programacion pero todo se aprende )

Exacto, eso es lo que quiero, tener un ejemplo de cliente y servidor para entender como es por dentro

Dedes el PC2-Servidor es donde están las variables para enviar las órdenes al PIC16F84A o otro. El PC1-Cliente, envía órdenes que el PC2-Servidor entiende que no tiene nada que ver con el PIC, sólo ejecuta las variables que tiene almacenadas en PC2-Servidor para que se comunique el PIC.

Después explico mejor lo que quiero decir con fotos.

Por ahora tengo que diseñar la Interfaz de control antes de empezar a programar.

pc1_cliente.jpg


EDITO:
pc2_fisico.jpg


Siguiendo el tema de http://www.pablin.com.ar/electron/proyecto/picnet/index.htm me gustaría tener un Telnet con fundamento que me haga caso. He intentado usar el que viene con Windows XP en modo CMD o líneas de comandos:

Cliente Telnet de Microsoft

El carácter de escape es "CTRL++"

Microsoft Telnet> open
( a ) 192.168.1.35:8888
Conectándose a 192.168.1.35:8888...No se puede abrir la conexión al host, en pue
rto 23: Error en la conexión
Microsoft Telnet>


¿Hago algo mal? También podría conectarme vía red o por mi mismo sin usar el 127.0.0.1
 
eidtech dijo:
Lo que necesitas es crear una conexión en base a sockets.

Ya tienes la mayoria de los conceptos, así que el resto solo es codificar.

Te recomiendo el siguiente libro.

Network programming in .NET de Fiach Reid.

Esta bastante completo, facil de entender y con sus respectivos ejemplos que se pueden descargar desde la web del autor.

No creas que me he olvidado de ti. Ya que hay ejemplos, ¿puedes decirme en qué Web me puedo bajar esos ejemplos?

Muchas gracias por el aporte.
 
Meta dijo:
eidtech dijo:
Lo que necesitas es crear una conexión en base a sockets.

Ya tienes la mayoria de los conceptos, así que el resto solo es codificar.

Te recomiendo el siguiente libro.

Network programming in .NET de Fiach Reid.

Esta bastante completo, facil de entender y con sus respectivos ejemplos que se pueden descargar desde la web del autor.

No creas que me he olvidado de ti. Ya que hay ejemplos, ¿puedes decirme en qué Web me puedo bajar esos ejemplos?

Muchas gracias por el aporte.

Estuve buscando en la web del autor y ya no estan los ejemplos para descargar, sin embargo los puedes copiar directo del libro.
 
eidtech dijo:
Meta dijo:
eidtech dijo:
Lo que necesitas es crear una conexión en base a sockets.

Ya tienes la mayoria de los conceptos, así que el resto solo es codificar.

Te recomiendo el siguiente libro.

Network programming in .NET de Fiach Reid.

Esta bastante completo, facil de entender y con sus respectivos ejemplos que se pueden descargar desde la web del autor.

No creas que me he olvidado de ti. Ya que hay ejemplos, ¿puedes decirme en qué Web me puedo bajar esos ejemplos?

Muchas gracias por el aporte.

Estuve buscando en la web del autor y ya no estan los ejemplos para descargar, sin embargo los puedes copiar directo del libro.

Entendido, desgraciadamente no tengo el libro y encima en Inglés.

Gracias por la ayuda.
 
Este ejemplo me sirvió. Cogí el EZServer09.exe de la web pablín y ahora me funciona al entrar. A ver si entro por el HyperTerminal de Windows. Estoy con el rollo de Winsock, si saben algo me avisan.


Visual C#
Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

namespace ClienteBF
{
    public partial class Form1 : Form
    {
        Socket client = null; 
        public Form1()
        {
            InitializeComponent();
        }

        private void btnConectar_Click(object sender, EventArgs e)
        {
            //Declaro variables
            int recv;

            byte[] data = new byte[1024];  //Buffer de recepción y envío de los datos
            string input, stringData;

            //Preparo los datos (IP y puerto) del servidor al que me voy a conectar
            //La clase IPEndPoint representa un extremo de red como una dirección IP y un número de puerto. 
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(textBox1.Text), 8888);

            //La clase Socket implementa la interfaz de sockets Berkeley (Creo el Socket)
             client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //CONECTO mi socket (cliente) al servidor definido por "ipep"
            //Try-Catch se usa en el caso de que un método pueda devolver excepciones
            //Connect puede devolver una excepción si es imposible conectar al servidor que queremos
            try
            {
                //Connect es un método de la clase Socket
                //Establece una conexión a un host remoto
                client.Connect(ipep);
                miTextBox.Text = "Conectado a 192.168.107.171 por el puerto 1234";
            }
            catch (SocketException error)
            {
                //Si existe algún error al conectar informaciónrmo al usuario
                miTextBox.Text = "Imposible conectar con el servidor:" + error;
                return;
            }

            //Desactivo el botón Conectar y activo el botón Desconectar
            btnDesconectar.Enabled = !btnDesconectar.Enabled;
            btnConectar.Enabled = !btnConectar.Enabled;

        }

        private void btnDesconectar_Click(object sender, EventArgs e)
        {
            //Finalizo conexion con el servidor
            client.Shutdown(SocketShutdown.Both);
            client.Close();

            miTextBox.Text = "Desconectado del Sevidor";

            //Desactivo el botón Conectar y activo el botón Desconectar
            btnDesconectar.Enabled = !btnDesconectar.Enabled;
            btnConectar.Enabled = !btnConectar.Enabled;
        }
    }
}
 
Haciendo pruebas con el Telnet que ya me funciona al menos en red interna. Al acceder por vía Internet yo mismo no puedo.

Para saber la IP pública:
http://www.adslayuda.com/ip.html
http://www.whatismyip.com

Da la casualidad de que tenemos dos PC en mi casa, uno mio y el otro de mi hermano. Tenemos la misma IP pública, la verdad que desde el router sólo se diferencia que el PC de cada uno de nosotros tenemos IP de red interna o Intranet.

En CMD de Windows, escriban
telnet open IP_Pública y puerto.

Me pide el password que yo pensaba que era el del servidor de pablin EZServer09.exe pero me di cuenta de que es del Router.

¿Saben alguna solución sobre este tipos de cosa? Primero hay que probar las herramientas de otros para luego saber que hacer con las mías. Cuando ya consiga entrar con las herramientas de terceros a mi IP pública para entrar a mi ordenador, entonces ya empezaré a programar algo.

Yony, gracias, pero en realidad siempre estoy aprendiendo...
 
Yo de nuevo

Estuve averiguando un poco y vi q hay algo q se llama winsock q es para poder hacer varias cosas desde un cliente a un server..

Estas son las cosas q permite uno q encontre:
* Enviar pulsaciones de teclas.
* Enviar un Mensaje que se mostrará en el servidor con un MsgBox.
* Enviar un comando al Servidor para que genere un string con todos los procesos que están corriendo en el server, luego le devuelve esa lista al cliente, y este lo visualiza en un Msgbox.
* Abrir y cerrar la bandeja del Cd mediante el api McisendString.
* El cliente puede ejecutar un archivo en el servidor.
* El cliente puede cerrar el proceso activo del Servidor, es decir la ventana activa.

Lo unico q esta en VB...

Aca te dejo el link para q lo veas:
http://www.recursosvisualbasic.com.ar/htm/utilidades-codigo-fuente/administrador-remoto-winsock.htm

Esta bastante bueno por q te deja hacer varias cosas.. Igual fijate por q en ese sitio hay varias cosas por el estilo...

Espero q sirva :)

Saludos!

Pablo.
 
Gracias pablovila:

Voy a investigar...

Por ahora he logrado conectarme en red mediante telnet y ya hasta puedo leer los mensajes desde el PIC16F84A-04. Es un menú de ayuda simple, pero se entiende. Repito, viene directamente del PIC, si pulsa ? aparece este mensaje de ayuda.

telnet_01.jpg


Lo que me gustaría para hacer pruebas, que alguien de ustedes me entren al PIC16F84A, los grabo con el móvil N70 y les envío el vídeo. Sólo por probar.

Hay que poner:
Telnet open 192.168.1.35 8888
Ya me entra en el servidor.
 
Meta dijo:
Gracias pablovila:

Voy a investigar...

Por ahora he logrado conectarme en red mediante telnet y ya hasta puedo leer los mensajes desde el PIC16F84A-04. Es un menú de ayuda simple, pero se entiende. Repito, viene directamente del PIC, si pulsa ? aparece este mensaje de ayuda.

telnet_01.jpg


Lo que me gustaría para hacer pruebas, que alguien de ustedes me entren al PIC16F84A, los grabo con el móvil N70 y les envío el vídeo. Sólo por probar.

Hay que poner:
Telnet open 192.168.1.35 8888
Ya me entra en el servidor.

Lo que tienes que hacer es abrir un puerto de tu router (por ejemplo el 8888) para que sea accesible desde internet y de ahi direccionar todas las peticiones a ese puerto a la dirección de tu PC que es 192.168.1.35 8888, eso lo haces en la configuración del firewall de tu router y tambien lee un poco sobre NAT (Network Address Translation).

Que modelo es tu router ?

Una vez que lo configures me gustaría entrar a tu sistema del PIC :)
 
Hay que poner en telnet
open metaconta.dnsalias.com 8888
pero no me entra.

Es la misma que en número.
open 81.35.205.73 8888

Para tener la misma IP. EL router es:
zyxel%20grande.jpg


Algo debo hacer en el router.
 
Atrás
Arriba