Foros del Web » Programación para mayores de 30 ;) » .NET »

Programacion de aplicaciones de red: comunicacion por sockets

Estas en el tema de Programacion de aplicaciones de red: comunicacion por sockets en el foro de .NET en Foros del Web. Hola a todos, Me estoy iniciando en la programación de aplicaciones en redes, y quiero empezar de la forma más sencilla posible, para luego ir ...
  #1 (permalink)  
Antiguo 27/10/2013, 10:24
 
Fecha de Ingreso: noviembre-2008
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 15 años, 5 meses
Puntos: 2
Programacion de aplicaciones de red: comunicacion por sockets

Hola a todos,

Me estoy iniciando en la programación de aplicaciones en redes, y quiero empezar de la forma más sencilla posible, para luego ir añadiendo funcionalidades e ir aprendiendo. He pensado en realizar la siguiente aplicación, por el momento es una app de consola, pero la modificare añadiendo windows forms:

- Cliente: Lee de la entrada estándar una cadena, y se la envía mediante socket TCP al servidor.

- Servidor: Crea socket de conexión, captura cadena pasada por el cliente y la imprime en la salida estandar.

No tengo muchos conocimientos de la clase System.Net, pero tras mucho estudio y mirar otros ejemplos de internet, he implementado la siguiente solucion:

Código:
//Cliente:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace TCPCliente
{
    class TCPCliente
    {
        static void Main(string[] args)
        {

            String cadena; 
            int bytes = 0;
            byte[] datos_envio;
           

            cadena = Console.ReadLine();
            
            //Dirección IP servidor: servidor en mi propia maquina
            IPAddress[] ipDestino = Dns.GetHostAddresses("localhost");
            //Dirección Socket servidor: puerto 6536 aleatorio
            IPEndPoint ipe = new IPEndPoint(ipDestino[0], 6536);
            //Creación Socket cliente
            Socket socketCliente = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                //Conexión entre sockets
                socketCliente.Connect(ipe);
            }
            catch (SocketException)
            {
                Console.WriteLine("No se ha podido producir la conexión");

            }
            datos_envio = System.Text.ASCIIEncoding.ASCII.GetBytes(cadena);
            socketCliente.Send(datos_envio,datos_envio.Length,SocketFlags.None);
            }
    }
}
Código:
//Servidor:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace TCPServidor
{
    class TCPServidor
    {
        static void Main(string[] args)
        {
            byte[] datos = new byte[1024];
            int bytes;
            String cadena;
//Creamos socket de acogida para el servidor
            IPAddress[] ipDestino = Dns.GetHostAddresses("localhost");
            IPEndPoint ipe = new IPEndPoint(ipDestino[0], 6536);
            Socket socketServidor = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
//Se ancla el socket al puerto especificado
                socketServidor.Bind(ipe);
            }
            catch (SocketException)
            {
                Console.WriteLine("Otra aplicación está usando el puerto");
            }
            socketServidor.Listen(1);

//Creamos socket de conexion
            Socket cliente = socketServidor.Accept();
            while(true)
            {
//Leemos cadena y escribimos por pantalla.
                bytes = cliente.Receive(datos);
                cadena = System.Text.ASCIIEncoding.ASCII.GetString(datos);
                cadenaMayuscula = cadena.ToUpper();
                if (cadena == "Exit")
                    break;
                Console.WriteLine(cadenaMayuscula);

            }

        }
    } 
}
Cuando ejecuto servidor y luego cliente pasando cadena por teclado, mete un petardazo y me lanza la siguiente excepción:

An unhandled exception of type 'System.Net.Sockets.SocketException' occurred in System.dll

Additional information: Se ha forzado la interrupción de una conexión existente por el host remoto

¿Por favor, alguien me puede guiar e indicarme que estoy haciendo bien y mal?

Muchas gracias de antemano.

Etiquetas: c#
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:09.