Sockets en C#
By: Date: diciembre 5, 2008 Categories: Programación

Despues de leer en el “nuevo” cofradía, acerca de SolarSocketsque es una librería para manejar conexiones TCP de forma sensilla y basada en clases o código lineal, vi que efectivamente la programación en esta librería era demasiado fácil para lo que respecta a C, sin embargo la clase en si misma no es una idea original, es el mismo mecanismo que usa C# para manejar conexiones TCP

El video de uso de SolarSockets:

En este articulo, escribo un código similar al sugerido por SolarSockets ,en GNU/Linux y ademas en Windows escribo un par de programas cliente – servidor, para un programa de chateo entre 2 puntos.

El siguiente código, imita al código de SolarSockets

using System;
using System.Net.Sockets;

namespace sockets1
{
    class Program
    {
        public static void Main(string[]
args)
        {

            
TcpClient servidor;
try
{

// Creando conexion al servidor
servidor = new TcpClient(“www.google.com”, 80);

}
catch
{
Console.WriteLine(“Fallo la conexion”);
Console.ReadKey(true);
return;
}

// Creando flujo de red y de el la lectura y escritura del mismo
NetworkStream flujodered = servidor.GetStream();
System.IO.StreamReader leerflujo = new
System.IO.StreamReader(flujodered);
System.IO.StreamWriter escribirflujo = new
System.IO.StreamWriter(flujodered);

String datos = “”;
try
{

// Lee del flujo de datos, en este caso , leera lo que envie
www.google.com y lo imprimira en pantalla
// para provochar que google envie algo, se envian 2 nuevas lineas y 2
retornos de carro “enters”
{
 escribirflujo.WriteLine (“\n\r\n\r”);
 escribirflujo.Flush();
datos = leerflujo.ReadToEnd();
Console.WriteLine(datos);
}
}
catch
{
Console.WriteLine(“Error al recibir el flujo de datos”);
}

            
          
 Console.ReadKey(true);
        }
    }
}

Codigo para leer una peticion de Google
Ver mas grande

El siguiente será un código similar, pero que espera recibir conexiones.

Se puede comprobar haciendo un telnet al puerto 5000 tcp

using System;
using System.Net.Sockets;
using System.Net;

namespace sockets2
{
    class Program
    {
        public static void Main(string[]
args)
        {
            
           
           
            TcpListener
escuchar = new TcpListener(IPAddress.Any,5000);
           
escuchar.Start();
            Socket cliente
= escuchar.AcceptSocket();
           
            if
(cliente.Connected)
            {
            // Terminar si
la conexion falla
            }
            else return;
           
            NetworkStream
flujodered = new NetworkStream(cliente);
           
System.IO.StreamWriter escribirflujo = new
System.IO.StreamWriter(flujodered);
           
System.IO.StreamReader leerflujo = new
System.IO.StreamReader(flujodered);
           
            try
            {
           
    escribirflujo.WriteLine (“Saludos desde la red”);
           
    escribirflujo.Flush();
           
    Console.WriteLine (leerflujo.ReadLine());
           
   
            }
           
catch(Exception e)
            {
            }

           
System.Console.ReadLine();
        }
    }
}

Ahora que la forma básica ha quedado clara de cómo conectarse o recibir conexiones, voy a escribir un programa en Windows que haga un chat

Para este programa, lo único adicional, será que le programare un hilo que se encargara de escuchar las conexiones, este hilo tiene un propósito, separa la ejecución del programa principal mientras espera recibir datos, porque de no hacerlo así, el programa se pasmaría, ya que se quedaría esperando la conexión y no atendería ni eventos, a la vista de quien lo usa, parecería que el programa se congelo. Así que al separar esa parte del código en un hilo, el hilo se queda esperando dato todo el tiempo y cuando los recibe, se los pasa por medio de variables estáticas al código principal

El código y los programas están dentro del siguiente ZIP, un video de cómo funciona a continuación.

6 thoughts on “Sockets en C#

  1. Mozilla Firefox 3.0.4 Windows XP

    Hahahaha…el santo…muy buenos videos, ahora hasta me dan ganas de aprender c/c++, asi mi mundo no se limitará a solo web, gracias por todos los tutos, han sido de mucha ayudar para aclarar mis dudas y aprender cosas nuevas, un saludo.

    PD. esto es lo que deberian de hacer en sus sites…no andar defaceando…

  2. Internet Explorer 7.0 Windows Vista

    El foro, pues alguien ha visto a murder online, ya todos me tienen hasta el gorro con el asunto del foro, voy a tener que levantar otro foro, por que no entiendan que no tengo la clave de ese foro, solo murder, hablen con el o con zeus o si ya no van a antender el foro y tengo tiempo pues tal vez y solo tal vez lo levanto yo.

  3. Mozilla Firefox 3.0.4 Ubuntu Linux

    Gran blog last, recientemente lo he encontrado, ya no recuerdo ni que estaba buscando, pero me ha agradado.

    Tmb me eh encontrado ese post de solarsockets en cofradia, pero no me ha agradado que al parecer la libreria es freeware (es mi opinion y en gustos se rompen generos), aunq en algunos sitios la suben para su descarga como gpl, algo confuso para sus usuarios.

    programo bajo c# hace tiempo y de momento estoy haciendo un par de experimentos multiplataforma bajo c/c++, para esto me he encontrado wxwidgets/wxsockets al parecer utilizadas por algunos grandes (aMule) a probar a ver q tal van.

    No tengo tanta experiencia en c/c++ como en otros lenguajes,

    se ve sabes bastante sobre el tema, q utilizarias para el desarrollo de un server q ocupe de un promedio de 1000 conexiones simultaneas c++/c#?

    saludos!

Responder a Administrator Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *