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 != "");
}
}
Saludos