Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: 9ttnix en 29 Mayo 2013, 23:11 pm



Título: Sockets C#: Multiples Conexiones
Publicado por: 9ttnix en 29 Mayo 2013, 23:11 pm
Hola amigos

Tengo un codigo que hice a base de leer y ver videos acerca de como programar sockets pero aunque entiendo mas o menos el funcionamiento, me gustaria saber como aceptar multiples conexiones. Tengo lo siguiente:

Código:
class Program
  {
    static CSocketServer m_servidor;
    static void Main(string[] args)
    {
      m_servidor = new CSocketServer();
      m_servidor.Iniciar(0);
    }
  }

public class CSocketServer
  {
    private Socket m_sckEscucha;
    private Socket m_sckConexion;

    private IPAddress m_ip;
    private Int32 m_puerto = 32111;
    static Thread m_rec;
    private string m_conv = "";
    public string DireccionIP
    {
      get
      {
        IPHostEntry lIp = Dns.GetHostEntry(Dns.GetHostName());
        IPAddress[] ladd = lIp.AddressList;
        return ladd[ladd.Length - 1].ToString();
      }
    }
    public Int32 Puerto
    {
      get { return m_puerto; }
    }
    public void Iniciar(Int32 vPuerto)
    {
      if (m_puerto != vPuerto)
        m_puerto = vPuerto;

      m_rec = new Thread(RecibiendoData);
      Console.WriteLine("Servidor IP: " + DireccionIP);
      m_conv = "Servidor IP: " + DireccionIP + "\n";
      Console.WriteLine("Servidor Puerto [32111]:");
      string lpuerto = Console.ReadLine();
      try { m_puerto = Convert.ToInt32(lpuerto); }
      catch { m_puerto = 32111; }
      m_conv = m_conv + "Servidor Puerto: " + m_puerto + "\n";
      m_ip = IPAddress.Parse(DireccionIP);
      m_sckEscucha = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      m_sckEscucha.Bind(new IPEndPoint(m_ip,m_puerto));
      m_sckEscucha.Listen(0);
      m_conv = m_conv + "Servidor Estado: Iniciado\n-----------------------------------\n\n";
      Console.Clear();
      Console.WriteLine(m_conv);
      m_sckConexion = m_sckEscucha.Accept();
      m_rec.Start();
      string lmen = "";
      do
      {
        lmen = Console.ReadLine();
        byte[] sdata = Encoding.Default.GetBytes(lmen);
        m_sckConexion.Send(sdata, 0, sdata.Length, 0);
        m_conv = m_conv + "Servidor: " + lmen + "\n";
        Console.Clear();
        Console.WriteLine(m_conv);
      } while (lmen != "exit");
    }
    private void RecibiendoData()
    {
      string lmen = "";
      do
      {
        if (!m_sckConexion.Connected)
          return;

        Thread.Sleep(500);
        byte[] sdata = new byte[255];
        Int32 rec = this.m_sckConexion.Receive(sdata, 0, sdata.Length, 0);
        Array.Resize(ref sdata, rec);
        lmen = Encoding.Default.GetString(sdata);
        m_conv = m_conv + "Cliente: " + lmen + "\n";
        Console.Clear();
        Console.WriteLine(m_conv);
      } while (lmen != "");
    }
  }
Todo lo tengo metido casi en Iniciar() y me gustaria saber como puedo hacer para recibir multiples conexiones, como detectar cada conexion entrante, cuando se desconecta, cuando esta enviando data, y tambien como enviar archivos.

Saludos