jueves, 3 de septiembre de 2009

Tcp/IP Sockets C#

Una red de computadoras (ordenadores) consiste en máquinas interconectadas mediante canales de comunicación.  Estas máquinas son Hosts y Routers. Los Hosts son computadoras que ejecutan aplicaciones, por ejemplo un navegador. Los Routers son equipos cuyo trabajo es retransmitir información de un canal de comunicación a otro. Estos pueden ejecutar programas, pero normalmente no son aplicativos. Para este post un canal de comunicación es un medio de transmisión de secuencias de bytes de un host a otro, este puede ser broadcast, como Ethernet, un modem dial-up, o algo más sofisticado.

Otro término que tenemos que definir es Protocolo. Un protocolo es un acuerdo acerca de los paquetes intercambiados por comunicación de los programas y lo que significan, además describe como está estructurado, por ejemplo: donde está la información del destinatario en el paquete y de que tamaño es. Un ejemplo es Http (Hypertext Transfer Protocol) que resuelve el problema de transferir objectos hipertexto entre servidores y hacerlo entendible por personas.

Ahora vamos directo al grano: ¿Qué es un Socket?

Un socket es una abstracción que permite a la aplicación “enchufarse” a la red para poder recibir y enviar data. Los principales tipos de socket hoy en día son los Stream Socket y los Datagram Socket. Los Stream Sockets utilizan TCP e IP para proveer n servicio confiable. Los Datagram Sockets usan UDP.

Otro concepto importante son el Stream Reader y el Stream Writer.

Son clases que nos ayudan a escribir y leer del buffer del socket. Sino existieran habría que leer el buffer y escribir en él directamente, cosa que es un poco engorrosa e innecesaria para la mayoría de las aplicaciones.

Código de ejemplo:

 

public class NetworkServer

{

    public static void Main()

    {

//creamos un thread para que el server

//se ejecute en paralelo con el cliente

//esto es solo por motivos prácticos del demo

        new Thread(new ThreadStart(

            delegate {

                new NetworkServer().Start(); }

                    )).Start();

 

//Iniciamos el Cliente

        new Client().Connect();

        Console.WriteLine("Listo");

Console.Read();


    }


    public  void Start()

    {

// Creamos un TcpListener y le indicamos que

//puerto va a poner en escucha.

        TcpListener tcpListener = new TcpListener(9898);

//Iniciamos la esucha

tcpListener.Start();

//Este método queda bloqueado hasta que

//se conecte un cliente

        Socket socketForClient = tcpListener.AcceptSocket();

 

        if (socketForClient.Connected)

        {

// Si se conecta

            Console.WriteLine("Cliente conectado.");

//Creamos el networkSream, el Reader y el writer

NetworkStream networkStream =

new NetworkStream(socketForClient);

            StreamWriter streamWriter =

new StreamWriter(networkStream);

 

            StreamReader streamReader =

new StreamReader(networkStream);


//Esta es la data a enviar.

string theString = "Esta es la data de envio";

            try

            {

//Escribimos la data en el stream

                streamWriter.WriteLine(theString);

//Ahora le decimos que la mande.

                streamWriter.Flush();

//Esperamos data del cliente

//Y la escribimos por consola.

                theString = streamReader.ReadLine();

                Console.WriteLine(theString);

            }

            finally

            {

//Cerramos las conexiones

                streamReader.Close();

                streamWriter.Close();

                networkStream.Close();

                socketForClient.Close();

            }

        }

    }

}

 



public class Client

{

    public void Connect()

    {

        TcpClient socketForServer;

        string server = "localhost";

        try

        {

//Creamos un TcpCliente y le pasamos

//el server y el puerto.

            socketForServer = new TcpClient(server, 9898);

        }

        catch

        {

            Console.WriteLine(

            "No se pudo conectar a {0}:9898", server);

            return;

        }


//aqui es lo mismo que en el server. Usamos StreamWriter y Reader.

        NetworkStream networkStream = socketForServer.GetStream();

StreamReader streamReader =

        new System.IO.StreamReader(networkStream);

       

StreamWriter streamWriter =

         new System.IO.StreamWriter(networkStream);


        try

        {

            string outputString = streamReader.ReadLine();

            Console.WriteLine(outputString);

            streamWriter.WriteLine("Mensaje desde el Cliente");

            streamWriter.Flush();

        }

        catch

        {

            Console.WriteLine("Exception reading from Server");

        }

        finally

        {

            networkStream.Close();

        }

    }

}





Esto es un demo muy básico, pero funciona correctamente. Se le pueden añadir funcionalidades como multithreading para poder aceptar a varios clientes al mismo tiempo.



Y como siempre gracias por leer!

57 comentarios:

  1. esta mas o menos entendible tu codigo

    ResponderEliminar
  2. Gracias por las críticas, se que se puede mejorar, posiblemente trabaje en eso este mes.

    Un saludo.

    ResponderEliminar
  3. hola amigo excelente aporte, solo una pregunta: la comunicacion es entre 2 computadoras o es en la misma computadora. Gracias

    ResponderEliminar
  4. Es indiferente, lo único que tienes que tener en cuenta es que en el cliente es el que dice a donde conectarse, entonces, esta línea string server = "localhost"; es la que dice a cual server. En este caso localhost, pero puede ser un dominio de internet o cualquier dirección IP.

    Un saludo carlos.

    ResponderEliminar
  5. Tengo un problema,han bloqueado mi IP de un chat...como puedo hacer para desbloquear?

    ResponderEliminar
  6. Hola Juan!

    Estoy tratando de entender un poco el tema de los sockets y hay UNA sola cosa que no me queda clara en tu código: COMO HAGO para mantener activa una conexion? O cada vez que necesito mandar un mje tengo que reconectar el cliente con el servidor? Asumo que no, y si estoy en lo correcto me gustaría saber como tengo que hacer para mantener tres o cuatro clientes conectados con el server y mandarles en determinados eventos un mensaje...

    Muchas gracias de ante mano!
    Germán.-

    ResponderEliminar
  7. hola juan me pregunto si tu codigo podria mandar msj a un panel de leds via ethernet es decir tengo la ip del panel de leds y quiero enviarle msj desde mi computadora se podria?

    ResponderEliminar
  8. @José, si, claro que sí. Si tienes la IP, el Puerto, y si conoces el protocolo de los mensajes que le tienes que enviar al panel no habrá ningún problema.

    @Picho/Germán, lo siento, no había visto tu entrada en los comentarios. Mi código es un demo, y por eso cierro la conexión, pero tu simplemente no llamarías al Close() en ese momento sino cuando cierres la aplicación o en un botón, etc. .Espero no sea muy tarde.


    Un saludo.

    ResponderEliminar
  9. disculpa y como haria para ingreasr la dirccion del servido. y no este como "localhost"

    ResponderEliminar
  10. como puedo crear un programa usando sockets para ver los programas que tiene abierto el cliente y poder finalisarlos.

    ResponderEliminar
  11. Hola, Puedes explicarte un poco más? x)

    ResponderEliminar
  12. como puedo crear un programa usando sockets para ver los programas que tiene abierto el cliente y poder finalisarlos desde el usuario

    ResponderEliminar
  13. perdon me equivoque la pregunta es como puedo crear un programa usando sockets para ver los programas que tiene abierto el cliente y poder finalisarlos desde el servidor

    ResponderEliminar
  14. Ese cliente, es tuyo? o es una aplicacion de terceros?

    ResponderEliminar
  15. Estoy interesado en saber cual es la diferencia entre mantener la conexion y abrirla cuando este para enviar informacion.

    ResponderEliminar
  16. Erikson, Todo depende de lo que vayas a hacer. Si mantienes la conexión abierta tienes un límite de conexiones por servidor (este límite es grande pero es finito), y si cierras las conexiones y las abres solo cuando las necesitas entonces puedes conectar infinitos clientes, claro, a costa de más complejidad.

    Ejemplo de siempre conectado: Aplicaciones de mensajería, msn, skype, etc

    Ejemplo de desconección: Protocolo Http, entre webservers y navegadores.

    un saludo.

    ResponderEliminar
  17. Disculpa, como le hago para simular tu codigo? que cprograma uso para poder correrlo y asi poder comunicar las 2 pc virtualmente?

    ResponderEliminar
  18. C# , puedes descargarte Visual Studio Express que es totalmente gratuito y sin ninguna limitación:
    http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products

    Un saludo!

    ResponderEliminar
  19. Muchas gracias lo probare por que lo necesito para mi proyecto.

    ResponderEliminar
  20. Aun tengo problemas para verlo, soy nuevo en esto y no tengo nada de experiencia en estos lenguajes pero te mande un correo con lo que necesito hacer aver si puedes ayudarme....

    ResponderEliminar
  21. Buenas Juan Andreu en primer lugar darte las gracias por compartir tus conocimientos. Al leer el post se me plantean algunas dudas.

    - Si quiero conectar dos máquinas distintas, como lo haría, ejecutaría la solución completa en ambas maquinas con los host configurados como las ips de la otra máquina? o con lanzarla en una máquina y configurar el puerto en la otra bastaría? Disculpa si es una pregunta tonta pero estoy pegado en el tema de conexiones y socket.

    Un saludo y gracias de antemano

    ResponderEliminar
  22. Hola,

    Bueno, la idea es tener dos aplicaciones, una cliente y la otra servidor. Aunque se puede programar el servidor para aceptar mas de una conexión al mismo tiempo.

    Esas dos clases van en dos proyectos separados, siento no haberlo dejado más claro.

    Gracias por comentar!

    ResponderEliminar
  23. Hola amigo, cuando intento conectarme por IP publica, me dice que el tiempo esta agotado para la conexion, que puedo hacer en este caso?

    ResponderEliminar
  24. Hola, pueden ser muchas cosas. Desde que ese equipo tenga un firewall, a problemas con la red.

    1) Verifica que ese equipo sea visible desde donde intentas conectarte.

    2) Busca un scanner de puertos y verifica que ese puerto esté abierto.

    Un saludo.

    ResponderEliminar
  25. buenas!

    si quisiera hacerlo para varios clientes, en el servidor lo que debería hacer, es cuando acepto la conexión genero una función que hará lo que tu haces para el envió y la recepción, pero esta la ejecutare en un subproceso. y asi con cada cliente que se conecte?

    (algo asi...)
    funcion (socket socketForClient){ //esta la iniciare con subproceso
    if (socketForClient.Connected)
    {
    // Si se conecta
    Console.WriteLine("Cliente conectado.");
    //Creamos el networkSream, el Reader y el writer
    NetworkStream networkStream =
    new NetworkStream(socketForClient);

    StreamWriter streamWriter =
    new StreamWriter(networkStream);

    StreamReader streamReader =
    new StreamReader(networkStream);

    //Esta es la data a enviar.
    string theString = "Esta es la data de envio";

    try
    {
    //Escribimos la data en el stream
    streamWriter.WriteLine(theString);
    //Ahora le decimos que la mande.
    streamWriter.Flush();
    //Esperamos data del cliente
    //Y la escribimos por consola.
    theString = streamReader.ReadLine();

    Console.WriteLine(theString);
    }
    }

    ResponderEliminar
  26. Exactamente Matías, cada cliente aceptado debería ejecutarse en un subproceso (Thread/Hilo) distinto.

    Puedes hacer una clase que maneje los hilos, y a su vez otra clase que gestione el comportamiento de cada cliente. Así vas construyendo robustez y escalabilidad.

    Tengo ganas de hacer un post al respecto, pero no he tenido tiempo!

    Gracias por comentar!!

    ResponderEliminar
  27. Muchas gracias por tu respuesta, tengo un problema el servidor solo puede escribir cuando el cliente ha enviado algo.

    y esto es una modificación que hice para que el cliente este intentado conectarse hasta que el server inicie!

    ________________________________________________
    class MainClass
    {
    public static bool error (TcpClient socketForServer){
    try{
    socketForServer = new TcpClient("localhost",8100) ;
    return true;
    }
    catch
    {return false;}
    }
    public static void Main (string[] args)
    {


    TcpClient socketForServer = null ;
    bool status = true ;

    try
    { bool ayuda = false;
    while(ayuda == false){
    ayuda=error(socketForServer);
    }
    socketForServer = new TcpClient("localhost",8100) ;
    Console.WriteLine("Connected to Server") ;
    }
    catch
    {
    Console.WriteLine("Failed to Connect to server{0}:999","localhost") ; //volver a intentar de conectar

    return ;
    }

    ResponderEliminar
  28. Qué tal?
    1) Bueno, puedes solucionarlo de varias formas. Y todo depende de tus requerimientos. Por ejemplo, si siempre necesitas que el cliente haga un request inicial, o si el servidor es el que lo hace. También puedes establecer un canal paralelo de forma inversa a como te conectas al servidor, en donde el servidor es quien manda una señal o datos al cliente (por un puerto aparte). Otra forma también factible es una mejora de la ultima y es simplemente dos threads paralelos en el cliente, y dos en el servidor por cada cliente. Así funcionan las aplicaciones de comunicación.

    2) Está bien lo que haces, te doy varios consejos por lo que puedo ver:

    - No mezcles inglés con español. Está bien programar en español, pero no hagas ensaladas de idiomas!
    - Nunca me gustó programar todo en el Program.cs, ni en pruebas. Crea clases con comportamientos encapsulados. Luego una clase algo así como "Servidor" en donde la instancias y la inicias en el main, de esta forma te quedaría algo asi:

    public static void Main (string[] args)
    {
    var servidor = MiSuperServidor();
    servidor.Iniciar();
    }


    - El try-catch debería estar dentro del while (según yo).

    PS: ya que estás por aquí, probablemente ponga una encuesta en la primera página para que los visitantes puedan elegir el próximo tema sobre el que voy a escribir! No te olvides de votar.!

    Un saludo!

    ResponderEliminar
  29. No hay una forma de que tanto el cliente como el servidor, manden varios mensajes, sin tener que utilizar otra conexión en paralelo?

    ResponderEliminar
  30. No creo, porque dependes de que el canal esté usado o libre..

    ResponderEliminar
  31. Buenas tardes.

    Para preguntar, a ver si me pueden orientar.

    Que me recomiendan utilizar para crear la siguiente conexión:

    Desde una terminal CK71 mobile, necesito enviar información a una dirección/puerto, el ambiente está en progress, pero no se si sea conveniente usar sockets.

    He utilizado sockets desde progress hacia algún dispositivo con ip y puerto asignado, pero no, de un dispositivo hacia mi servidor en donde se encuentra progress.

    El desarrollo se está llevando a cabo en C#, pero, que me recomendarían?

    El detalle es este, necesito enviar información leida en una terminal, a mi servidor en donde se encuentra progress, para realizar una consulta y traer el resultado de nuevo a la terminal.

    Sabes que podría hacer en este caso?

    De antemano, muchas gracias.

    Saludos.

    Roberto Barajas

    ResponderEliminar
    Respuestas
    1. Hola!,

      Tienes varias soluciones:
      1) Usar C# para conectarte directamente con TCP/IP. (No hay impedimento para esto).
      2) Si existe algún problema, puedes hacer un webservice en el servidor y conectarte desde el dispositivo móvil mediante éste.
      3) Una base de datos Sql Server en el servidor, y en el móvil utilizar Sql Server Replication.
      4) Busca en internet a ver si Progress tiene algún tipo de API o algo parecido.

      Suerte!

      Eliminar
  32. Buenas me da un error en q no reconoce el tipo tread donde lo puedo solucionar gracias

    ResponderEliminar
    Respuestas
    1. Te repondo después de dos años!! LO SIENTO!! ya no es por ti (que suponog que lo habrás solucionado), sino por otro que pueda tener este mismo problema.

      Te faltó, seguramente, añadir los namespaces correspondientes a las clases. En este caso, System.Threading.

      Un saludo!

      Eliminar
  33. Buen día. Gracias por el tutoria. Tengo una duda, si por ejemplo tengo 2 clientes conectados a mi servidor de manera permanente (que no cierro conexión), ¿cómo puedo en cualquier momento poder enviarle un mensaje a cada uno de ellos de manera específica? ¿al momento que se crea la conexión se crea un identificador para diferenciar cada conexión? me gustaría tener un idea general o que me brindes una palabra clave con la cual comenzar mi búsqueda. Muchas gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Hola Johnny,

      Es correcto, tienes que, de alguna forma, identificar a los clientes. Puedes escribirte tu propio protocolo, o por ejemplo algo más simple, puedes mapear cada cliente a una IP y un identificador, de forma tal que puedas inequívocamente identificarlos.

      Lo que yo haría es crear un protocolo simple entre tus clientes. En donde al momento de que se cree la conexión, le envías un identificador que luego puedas hacer un "request" o llamada de ese identificador. Y mejor si aprovechas este protocolo y lo escribes para que puedas escalarlo para más opciones. Ejm: Pedir IP al cliente, Pedir Identificador, Cerrar connecion de forma remota, enviar mensajes, establecer estados, confirmar estados, etc.

      Todo esto se hace enviando y recibiendo strings específicos que te "inventes" para cada operación.

      Mírate algún código de un bot de IRC, que funcionan de forma parecida parseando textos de chat y convirtiéndolos en acciones en el servidor. Aunque en tu caso sea inverso, los mensajes van del server al cliente, pero la idea es la misma.

      Cualquier cosa me escribes de nuevo y te respondo lo más rápido que pueda.

      Un saludo!

      Eliminar
  34. Hola Juan Andreu,

    Me parece interesante el tema, tengo poco conocimiento de estos conceptos y como estos se relacionan, tendras algun link de algun autor sobre sockets para novatos? cual recomendarias?.

    ResponderEliminar
    Respuestas
    1. Hola que tal?
      He buscado y no hay mucho material básico. Te recomiendo leer esto primero:
      http://es.ccm.net/contents/282-tcp-ip
      Luego
      http://www.codeproject.com/Articles/13071/Programming-Windows-TCP-Sockets-in-C-for-the-Begin
      Esta en inglés pero está genial.
      Intenta leerte todo lo que puedas en la wikipedia sobre redes, ip, tcp, sockets, conexiones, capas, etc. Ya que es muy importante tener todos esos conocimientos, incluso cuando prefieras usar alguna capa por encima y facilitarte la vida, siempre es bueno saber que hacen esas librerias por debajo. Creeme que te resolverá muchos problemas.

      Un saludo!

      Eliminar
    2. Excelente , Gracias Estimado ! por compartir tus conocimientos,
      saludos!, y tendras alguna cuenta social por donde compartes sobre programacion?

      Eliminar
    3. Si pero últimamente no escribo mucho. Sígueme en twitter @blogdejuan
      A ver si le dedico un poco a esto y publico más artículos!

      Tengo ganas de hacer una serie de post que describan lo que voy haciendo con un proyecto nuevo que está por salir.

      Gracias por tu comentarios!

      Eliminar
  35. Saludos, aun esta activo este post? (excelete articulo), tengo un problema , y queria ver si me podrian ayudar, gracias

    ResponderEliminar
  36. Hola, yo tengo una cuestión que no me ha quedado clara...¿Existe la posibilidad que desde un router wireless como el de tplink, el cual puede configurarse accediendo por su ip en un browser, mande sockets o un ping continuado a una raspberry que está conectada mediante una interfaz wifi a la red creada por el router? Mi objetivo es leer en la raspberry la potencia del router pero únicamente puedo hacer desde la página de configuración un máximo de 50 pings, si pudiera enviar infinitos ping o sockets...

    ResponderEliminar
    Respuestas
    1. Hola Leyre. Tendrías que tener un router capaz de ejecutar tareas o scripts. Normalmente el de casa, el que te da la compañía de internet, no es tan custom como otros modelos más avanzados.

      TpLink tiene routers buenos, pero no se si se pueden ejecutar programas o comandos desde él.

      Tendrías que buscar primero la forma de flashear el SO del router para ponerle otro que te permita ejecutar más cosas (aparte de la capacidad natural de router), por ejemplo DDWRT.
      Lista de routers compatibles:

      http://www.dd-wrt.com/wiki/index.php/Supported_Devices

      Luego tendrias que hackear el router:
      http://www.howtogeek.com/98408/how-to-install-additional-software-on-your-router-dd-wrt/

      Luego te programas lo que necesites y lo ejecutas como un daemon. Recuerda que es linux, por lo que si haces tu "ping" en .net tendría que ser Mono compatible! (no es muy dificil)

      Un saludo!

      Eliminar
  37. como cerrar la coneccion desde un cliente a sin que se caiga mi servidor? gracias por tu ayuda

    ResponderEliminar
  38. No puedo probar esto, por falta de tiempo.
    No es posible lo que describes, ya que es imposible saber si se ha cerrado , o se ha caido la conexion , o si hay problemas, etc.

    Lo que tienes que hacer es controlar del lado del servidor el estado de cada cliente conectado. Una forma de hacer esto, y la que yo creo es la mejor, es haciendo "poll" al cliente.

    Metes este codigo en un metodo en donde tengas encapsulado la logica del cliente y lo llamas cuando sea necesario.
    Tambien tienes que tener en cuenta excepciones y controlarlas.

    El problema esta en que la propiedad Connected a veces retorna true y no es veridico.
    //nSocket es el socket de TcpClient. Lo obtienes asi: tcpClient.Client


    if (_nSocket.Connected)
    {
    if ((_nSocket.Poll(0, SelectMode.SelectWrite)) && (!_nSocket.Poll(0, SelectMode.SelectError)))
    {
    byte[] buffer = new byte[1];
    if (_nSocket.Receive(buffer, SocketFlags.Peek) == 0)
    {
    return false;
    }
    else
    {
    return true;
    }
    }
    else
    {
    return false;
    }
    }
    else
    {
    return false;
    }

    Si aun tienes problemas con tu codigo, te recomiendo revisar el diseño de tu logica, y siempre escribir todo de forma tal que puedas controlar errores en todo momento. No solamente tu servidor no deberia caerse si el cliente se desconecta, sino que tambien si se cae la conexion, etc.


    Un saludo.

    ResponderEliminar
  39. Muchas gracias por el aporte se agradece mucho.

    ResponderEliminar
  40. Hola, cuando ejecuto el programa cliente funciona todo bien, pero si reinicio el programa cliente se queda trabado, me veo obligado a reiniciar el programa servidor.Alguien sabe por que?

    como puedo ejecutar el programa cliente sin reiniciar el servidor?

    ResponderEliminar
    Respuestas
    1. Hola,

      Tienes que tener en cuenta que esto es solo DEMO, una prueba de código para demostrar el funcionamiento básico de estas librerias.

      Tienes que comprobar que al desconectarse el cliente "muera" el hilo relacionado con él, y que siga escuchando peticiones entrantes subsecuentes.

      Fíjate que el cliente y el servidor estan en el mismo proceso, deberían estar separados. Y tambien el método AcceptSocket se llama una sola vez. Deberías llamarle varias veces y crear un hilo por cada petición.

      Lamentablemente ya no tengo mucho tiempo para crear más tutoriales :(

      Eliminar
  41. Hola Juan, me pareció muy bueno tu articulo ya que no hay demasiada info y expertice del tema.

    Estoy tratando de encontrar info para poder tomar estadística de los puertos/sockets tcp, te pongo en contexto, tengo una aplicación cliente servidor que no es mía es de un fabricante americano y tiene desconexiones con otras aplicaciones clientes, el sistema se basa en servicios distribuidos que se conectan por socket y estos están teniendo desconexiones, como son servicios críticos del negocio me surge la necesidad de poder determinar cual es el problema ya que problemas de red no son porque corren otros servicios de las mismas características en los host y los otros servicios no sufren el problema, se me ocurrió poder contabilizar los bytes enviados y recibidos en el socket y los tiempos promedios de recepción y envio como para tener la evidencia si es un problema de la aplicacion/servicio en este caso recibiria bytes pero no enviaria o al menos tener mas info para continuar en busca de la causa del problema.

    Te agradezco de ante mano y en lo que me puedas colaborar sera bienvenido¡¡

    Abrazo.

    ResponderEliminar
  42. Buenas, te recomendaria que descartases red completamente y usases https://www.wireshark.org o similar.

    Luego podria ser que teniendo una red problemática, algunos servicios estén mejor preparados para ello que esa aplicación, por lo que se generan las caidas.

    Prueba con wireshark o similar y trata de determinar el problema exactamente y aislarlo.

    Como son servicios distribuidos, deberías montar algo que te permita duplicar la transmisión en cualquier endpoint, asi vas variando y depurando cada equipo y tramo de red.

    Un saludo

    ResponderEliminar
  43. Hola me podrias ayudar. como es que podria recibir mas de un cliente y contestarles

    ResponderEliminar
  44. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  45. hola como estan me gustaria saber como puedo comunicar una tarjeta que me esta enviando informacion de un sensor constantemente por el puerto ethernet con c# , seria manejarlo como cliente servidor con socket o existe una manera diferente en c# ?

    ResponderEliminar
    Respuestas
    1. Sí, sin problemas. Con un server TCP/IP o uno UDP (dependiendo de como te envíe los datos el sensor) te vendría bien.
      Si puedes configurar el sensor para que apunte a cualquier sitio, pues lo único que tendrías que hacer es un pequeño Server y escribir la data a algún Stream y luego tratarla. Podrías guardar luego en base de datos o en archivos de texto.

      Qué dispositivo es el del sensor?

      Eliminar
    2. hola juan mira bascicamente lo que deseo hacer es comunicar una bascula a la cual le estoy conectando un conversor de rs232 a lan y que c# me lea el dato del peso , por medio de hyperterminal ya probé la comunicación y funciona bien , pero la verdad necesito es ver esos datos en c#

      Eliminar