Una red de computadoras (ordenadores) consiste en máquinas interconectadas mediante canales de comunicación. Estas máquinas son Hosts y Routers. Los Hosts son computadoras que ejecutan aplicaciones, por ejemplo un navegador. Los Routers son equipos cuyo trabajo es retransmitir información de un canal de comunicación a otro. Estos pueden ejecutar programas, pero normalmente no son aplicativos. Para este post un canal de comunicación es un medio de transmisión de secuencias de bytes de un host a otro, este puede ser broadcast, como Ethernet, un modem dial-up, o algo más sofisticado.
Otro término que tenemos que definir es Protocolo. Un protocolo es un acuerdo acerca de los paquetes intercambiados por comunicación de los programas y lo que significan, además describe como está estructurado, por ejemplo: donde está la información del destinatario en el paquete y de que tamaño es. Un ejemplo es Http (Hypertext Transfer Protocol) que resuelve el problema de transferir objectos hipertexto entre servidores y hacerlo entendible por personas.
Ahora vamos directo al grano: ¿Qué es un Socket?
Un socket es una abstracción que permite a la aplicación “enchufarse” a la red para poder recibir y enviar data. Los principales tipos de socket hoy en día son los Stream Socket y los Datagram Socket. Los Stream Sockets utilizan TCP e IP para proveer n servicio confiable. Los Datagram Sockets usan UDP.
Otro concepto importante son el Stream Reader y el Stream Writer.
Son clases que nos ayudan a escribir y leer del buffer del socket. Sino existieran habría que leer el buffer y escribir en él directamente, cosa que es un poco engorrosa e innecesaria para la mayoría de las aplicaciones.
Código de ejemplo:
Codigo Servidor
public class NetworkServer
{
public static void Main()
{
//creamos un thread para que el server
//se ejecute en paralelo con el cliente
//esto es solo por motivos prácticos del demo
delegate {
new NetworkServer
().Start(); } )).Start();
//Iniciamos el Cliente
Console.WriteLine("Listo");
Console.Read();
}
public void Start()
{
// Creamos un TcpListener y le indicamos que
//puerto va a poner en escucha.
TcpListener tcpListener
= new TcpListener
(9898);
//Iniciamos la esucha
tcpListener.Start();
//Este método queda bloqueado hasta que
//se conecte un cliente
Socket socketForClient = tcpListener.AcceptSocket();
if (socketForClient.Connected)
{
// Si se conecta
Console.WriteLine("Cliente conectado.");
//Creamos el networkSream, el Reader y el writer
NetworkStream networkStream =
new NetworkStream
(socketForClient
);
StreamWriter streamWriter =
new StreamWriter
(networkStream
);
StreamReader streamReader =
new StreamReader
(networkStream
);
//Esta es la data a enviar.
string theString = "Esta es la data de envio";
try
{
//Escribimos la data en el stream
streamWriter.WriteLine(theString);
//Ahora le decimos que la mande.
streamWriter.Flush();
//Esperamos data del cliente
//Y la escribimos por consola.
theString = streamReader.ReadLine();
Console.WriteLine(theString);
}
finally
{
//Cerramos las conexiones
streamReader.Close();
streamWriter.Close();
networkStream.Close();
socketForClient.Close();
}
}
}
}
Codigo Cliente
public class Client
{
public void Connect()
{
TcpClient socketForServer;
string server = "localhost";
try
{
//Creamos un TcpCliente y le pasamos
//el server y el puerto.
socketForServer
= new TcpClient
(server,
9898); }
catch
{
Console.WriteLine(
"No se pudo conectar a {0}:9898", server);
return;
}
//aqui es lo mismo que en el server. Usamos StreamWriter y Reader.
NetworkStream networkStream = socketForServer.GetStream();
StreamReader streamReader =
new System.IO.StreamReader(networkStream
);
StreamWriter streamWriter =
new System.IO.StreamWriter(networkStream
);
try
{
string outputString = streamReader.ReadLine();
Console.WriteLine(outputString);
streamWriter.WriteLine("Mensaje desde el Cliente");
streamWriter.Flush();
}
catch
{
Console.WriteLine("Exception reading from Server");
}
finally
{
networkStream.Close();
}
}
}
Esto es un demo muy básico, pero funciona correctamente. Se le pueden añadir funcionalidades como multithreading para poder aceptar a varios clientes al mismo tiempo.
muy basico ???
entonces quisiera algo mas basico.. ayudenme es esto lo que nesecito pero... en donde lo uso las clases que se crea el del cliente y servidor.. en un boton ??? o donde.. respondame xfavor !!!