Escucha de puertos en el lado del servidor

Prepara la aplicación del lado del servidor, enlaza la dirección IP y el puerto usando TcpListener, activa la escucha del puerto y espera las conexiones TCP que envíen los clientes. Se entregan dos variantes de implementación: aplicación de consola y aplicación de ventana WinForms.

Explicación de las API principales

  1. IPAddress: Representa la dirección IP de la máquina local. Con IPAddress.Parse("127.0.0.1") convertimos una cadena de texto IP a un objeto.
    • 127.0.0.1: Dirección de bucle local, solo accesible desde el propio equipo. Si quieres que otros equipos de la red local se conecten, usa la IP de red interna, por ejemplo 192.168.x.x;
    • IPAddress.Any: Se pone a escuchar en todas las IP de las tarjetas de red del equipo.
  2. TcpListener: Clase para escuchar conexiones TCP del servidor. Parámetros del constructor: Dirección IP + número de puerto
  3. listener.Start(): Iniciar la escucha. Al ejecutarlo, el servidor empieza a esperar conexiones de clientes.

Versión consola

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

namespace TalkService
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creamos el objeto IP
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            // Creamos el escuchador TCP en el puerto 9500
            TcpListener listener = new TcpListener(ip, 9500);
            // Activamos la escucha
            listener.Start();
            Console.WriteLine("Escucha activada... Presiona E para salir");

            ConsoleKeyInfo info;
            do
            {
                info = Console.ReadKey();
            } while (info.Key != ConsoleKey.E);

            listener.Stop(); // Detenemos la escucha al salir
        }
    }
}Lenguaje del código: JavaScript (javascript)

Este código solo arranca la escucha, aún no llamamos a AcceptTcpClient para esperar clientes, simplemente evita que el programa se cierre.

Versión WinForms

Controles de interfaz: (puedes agregar controles al formulario WinForm para configurar la IP, el puerto, los mensajes de texto a enviar y demás)

  • textBoxIP: Campo de entrada de IP (valor por defecto 127.0.0.1)
  • textBoxPort: Campo de entrada de puerto (valor por defecto 9500)
  • buttonStart: Botón de inicio
  • textBoxInfo: Cuadro de texto para mostrar mensajes informativos
using System;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;

namespace SocketChatServer
{
    public partial class Form1 : Form
    {
        IPAddress ip;
        TcpListener listener;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            // Leemos y convertimos IP y puerto
            ip = IPAddress.Parse(this.textBoxIP.Text);
            int port = Convert.ToInt32(this.textBoxPort.Text);
            listener = new TcpListener(ip, port);

            // Ponemos en marcha la escucha
            listener.Start();

            // Escribimos el registro de actividad
            string log = $"Servidor iniciado {DateTime.Now.ToShortTimeString()}\r\n";
            this.textBoxInfo.Text = log + this.textBoxInfo.Text;
        }
    }
}Lenguaje del código: PHP (php)

Puntos pendientes por resolver

  1. Problema de bloqueo de la interfaz
    El método listener.AcceptTcpClient() es un método bloqueante. Si lo invocas directamente desde el hilo principal al pulsar el botón, la ventana se quedará colgada. Más adelante debes crear un hilo nuevo o usar async/await para esperar conexiones de forma asíncrona.
  2. Puerto ocupado por otra aplicación
    Si el puerto 9500 lo está usando otro programa, al instanciar new TcpListener() saltará una excepción. Durante el desarrollo debes añadir un bloque try‑catch para capturar el error.
  3. Conexión entre equipos distintos
    Si enlazas 127.0.0.1 solo podrás depurar desde el mismo equipo. Para que otros ordenadores de la red local se conecten, introduce la IP local de tu máquina y permite el puerto 9500 en el firewall.

Escucha de puertos en el lado del servidor

Previous:
Next:

Deja una respuesta

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