elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [Tutorial] Tcp/IP Sockets C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Tutorial] Tcp/IP Sockets C#  (Leído 38,158 veces)
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
[Tutorial] Tcp/IP Sockets C#
« en: 12 Marzo 2010, 22:40 pm »

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
Código
  1. public class NetworkServer
  2.  
  3. {
  4.    public static void Main()
  5.    {
  6.       //creamos un thread para que el server
  7.       //se ejecute en paralelo con el cliente
  8.       //esto es solo por motivos prácticos del demo
  9.       new Thread(new ThreadStart(
  10.            delegate {
  11.                new NetworkServer().Start(); }
  12.                    )).Start();
  13.  
  14.       //Iniciamos el Cliente
  15.       new Client().Connect();
  16.       Console.WriteLine("Listo");
  17.       Console.Read();
  18.    }
  19.  
  20.    public  void Start()
  21.    {
  22.       // Creamos un TcpListener y le indicamos que
  23.       //puerto va a poner en escucha.
  24.       TcpListener tcpListener = new TcpListener(9898);
  25.  
  26.        //Iniciamos la esucha
  27.       tcpListener.Start();
  28.  
  29.       //Este método queda bloqueado hasta que
  30.       //se conecte un cliente
  31.       Socket socketForClient = tcpListener.AcceptSocket();
  32.       if (socketForClient.Connected)
  33.       {
  34.  
  35.          // Si se conecta
  36.          Console.WriteLine("Cliente conectado.");
  37.          //Creamos el networkSream, el Reader y el writer
  38.  
  39.          NetworkStream networkStream =
  40.                   new NetworkStream(socketForClient);
  41.  
  42.          StreamWriter streamWriter =
  43.                   new StreamWriter(networkStream);
  44.  
  45.          StreamReader streamReader =
  46.                   new StreamReader(networkStream);
  47.  
  48.          //Esta es la data a enviar.
  49.          string theString = "Esta es la data de envio";
  50.  
  51.          try
  52.          {
  53.              //Escribimos la data en el stream
  54.              streamWriter.WriteLine(theString);
  55.  
  56.              //Ahora le decimos que la mande.
  57.              streamWriter.Flush();
  58.  
  59.              //Esperamos data del cliente
  60.              //Y la escribimos por consola.
  61.               theString = streamReader.ReadLine();
  62.               Console.WriteLine(theString);
  63.            }
  64.            finally
  65.            {
  66.                //Cerramos las conexiones
  67.                streamReader.Close();
  68.                streamWriter.Close();
  69.                networkStream.Close();
  70.                socketForClient.Close();
  71.            }
  72.        }
  73.    }
  74. }
  75.  


Codigo Cliente
 
Código
  1. public class Client
  2. {
  3.    public void Connect()
  4.    {
  5.        TcpClient socketForServer;
  6.        string server = "localhost";
  7.  
  8.        try
  9.        {  
  10.            //Creamos un TcpCliente y le pasamos
  11.            //el server y el puerto.
  12.            socketForServer = new TcpClient(server, 9898);
  13.        }
  14.        catch
  15.        {
  16.            Console.WriteLine(
  17.            "No se pudo conectar a {0}:9898", server);
  18.            return;
  19.        }
  20.  
  21.  
  22.        //aqui es lo mismo que en el server. Usamos StreamWriter y Reader.
  23.        NetworkStream networkStream = socketForServer.GetStream();
  24.  
  25.        StreamReader streamReader =
  26.              new System.IO.StreamReader(networkStream);
  27.  
  28.        StreamWriter streamWriter =
  29.              new System.IO.StreamWriter(networkStream);
  30.  
  31.        try
  32.        {
  33.            string outputString = streamReader.ReadLine();
  34.            Console.WriteLine(outputString);
  35.            streamWriter.WriteLine("Mensaje desde el Cliente");
  36.            streamWriter.Flush();
  37.        }
  38.        catch
  39.        {
  40.            Console.WriteLine("Exception reading from Server");
  41.        }
  42.        finally
  43.        {
  44.            networkStream.Close();
  45.        }
  46.    }
  47. }






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.


« Última modificación: 13 Marzo 2010, 15:14 pm por D4N93R » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #1 en: 13 Marzo 2010, 00:31 am »

Muy lindo muy lindo..... (falta el pero :xD)

jaja... pense que habias puesto solo el servidor, despues leyendo bien pusiste el cliente (deberias separar el code), tienen que ser 2 proyectos verdad?....

Buen Aporte


En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #2 en: 13 Marzo 2010, 15:15 pm »

Gracias por la correción, ya separé los códigos, se me había olvidado!

:P
En línea

_LooSeR_

Desconectado Desconectado

Mensajes: 48



Ver Perfil
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #3 en: 15 Marzo 2010, 05:54 am »

Gracias por el tuto ;)

Así da gusto!
En línea

TomaSs

Desconectado Desconectado

Mensajes: 101



Ver Perfil
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #4 en: 29 Julio 2010, 01:26 am »

Una preguntilla D4N93R
y estas dos clases, la del cliente y la del servidor, tienen que estar en el mismo programa?? porque la del server utiliza la clase del cliente entonces tendrán que estar en el mismo, no?
entonces que ejecuta el servidor y que ejecuta el cliente?
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #5 en: 29 Julio 2010, 02:20 am »

Pueden estarlo, pero no es la idea xD, deben de estar en distintos programas, y en distintos equipos.. :)

Aunque pueden ser usadas en la misma aplicación.

Si te fijas son solo dos clases, usas la clase correspondiente en la aplicación donde la necesites..

EDIT: Además es solo una demostración, a esas clases puedes agregarles eventos, métodos y propiedades para usarlas correctamente dentro de un proyecto.

Un saludo!
En línea

fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #6 en: 31 Julio 2010, 12:54 pm »

POorque no pones el codigo completo coon los using y todo? As provado el code y te funciona?

salu2!
En línea

Un byte a la izquierda.
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #7 en: 31 Julio 2010, 16:04 pm »

POorque no pones el codigo completo coon los using y todo? As provado el code y te funciona?

salu2!

Auhm, el código está completo, no le hace falta nada, si te refieres a probarlo, basta solo con crear dos proyectos, pegar eso y listo, debería correr usando el main como entrypoint.

Este demo es muy sencillo ya que busca la comprensión para los que nunca hantes han realizado una connexión TCP en .Net, si lo quieres mejorar y agregarle funcionalidades multihilo o la capacidad de que el server acepte varios clientes ya se sale del tema, porque es nada más cuestión de modificarlo.

Para qué quieres los using? son los de siempre, y si te hace falta alguno Visual Studio te avisa..

Un saludo!
« Última modificación: 31 Julio 2010, 16:06 pm por D4N93R » En línea

fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #8 en: 31 Julio 2010, 16:17 pm »

A mi me da error al compilar el servidor... el cliente no prove... y con los using de siempre a cuales te refieres? a System solo o que?  yo no se cuales so nlos que tu usas siempre...

salu2!
En línea

Un byte a la izquierda.
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Tutorial] Tcp/IP Sockets C#
« Respuesta #9 en: 31 Julio 2010, 16:36 pm »

Necesitas estos namespaces:
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Threading;
  7. using System.IO;
  8.  

Dime si te da algún error al compilar.. OJo: quita la linea 
Código:
new Client().Connect();
Porque está ahí solo por propósitos de prueba.

Saludos!
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Tutorial] Sockets en C# « 1 2 3 »
.NET (C#, VB.NET, ASP)
Hendrix 23 161,022 Último mensaje 28 Octubre 2011, 22:15 pm
por CATBro
[Tutorial] Introducion a los sockets en Ansi C : By Sagrini 2010
Programación C/C++
Garfield07 8 7,508 Último mensaje 19 Enero 2011, 19:50 pm
por Garfield07
MOVIDO: windows sockets en c, ejemplos o tutorial
Programación General
Eleкtro 0 2,164 Último mensaje 6 Abril 2015, 01:20 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines