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
IPAddress: Representa la dirección IP de la máquina local. ConIPAddress.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 ejemplo192.168.x.x;IPAddress.Any: Se pone a escuchar en todas las IP de las tarjetas de red del equipo.
TcpListener: Clase para escuchar conexiones TCP del servidor. Parámetros del constructor:Dirección IP + número de puertolistener.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 defecto127.0.0.1)textBoxPort: Campo de entrada de puerto (valor por defecto9500)buttonStart: Botón de iniciotextBoxInfo: 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
- Problema de bloqueo de la interfaz
El métodolistener.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 usarasync/awaitpara esperar conexiones de forma asíncrona. - Puerto ocupado por otra aplicación
Si el puerto 9500 lo está usando otro programa, al instanciarnew TcpListener()saltará una excepción. Durante el desarrollo debes añadir un bloque try‑catch para capturar el error. - Conexión entre equipos distintos
Si enlazas127.0.0.1solo 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