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

NetworkStreams C# 2.0

Estas en el tema de NetworkStreams C# 2.0 en el foro de .NET en Foros del Web. Buenar tardes foreros !!! Bueno, estoy intentando realizar una escritura y una lectura de forma asíncrona através de NetworkStreams en dos aplicaciones de prueba para ...
  #1 (permalink)  
Antiguo 20/02/2007, 05:49
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 9 meses
Puntos: 7
NetworkStreams C# 2.0

Buenar tardes foreros !!!

Bueno, estoy intentando realizar una escritura y una lectura de forma asíncrona através de NetworkStreams en dos aplicaciones de prueba para ir trasteando un poco. Por ahora me va a "MEDIAS" bien y nunca mejor dicho.

El problema que tengo es que (Como verán en el código) cada vez que pulso el botón enviar, envio un dato nuevo junto con un número que voy aumentando (Esto lo hago para hacer un pequeño seguimiento).

Pues bien... de cada vez que pulso el botón, solo llega uno de dos. Por ejemplo:
Esto es un texto a enviar.1 (Este no llega)
Esto es un texto a enviar.2 (Este si llega)
Esto es un texto a enviar.3 (Este no llega)
Esto es un texto a enviar.4 (Este si llega)

Y no tengo ni idea de por qué es... estuve mirando tanto en el "cliente" como en el "servidor" y en fin.. creo que el problema lo tengo en el servidor, que no termina la lecutra hasta que le vuelvo a enviar un dato... pero no lo tengo claro.


codigo Programa que Envia
Código:
        private Socket objSocket;
        int contadorPrueba = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            IPEndPoint equipoDestino = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2999);
            objSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            objSocket.Connect(equipoDestino);
        }

        private NetworkStream objStream;
        private void button2_Click(object sender, EventArgs e)
        {
            contadorPrueba++;
            objStream = new NetworkStream(objSocket);
            if (objStream.CanWrite)
            {
                byte[] datoEnviar;
                datoEnviar = ASCIIEncoding.ASCII.GetBytes("Esto es un texto a enviar." + contadorPrueba.ToString());
                objStream.Write(datoEnviar, 0, datoEnviar.Length);
                objStream.Close();
            }
        }



codigo Programa que Recibe
Código:
        private Socket objSocket;
        private void IniciarSocket()
        {
            IPEndPoint equipoLocal = new IPEndPoint(IPAddress.Any, 2999);
            objSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            objSocket.Bind(equipoLocal);
            objSocket.Listen(5);

            objSocket.BeginAccept(new AsyncCallback(ConexionEstablecida), objSocket);
        }
        private void ConexionEstablecida(IAsyncResult Iar)
        {
            //objSocketManejador: Representa al socket de IniciarSocket, es "el mismo objeto".
            Socket objSocketManejador = (Socket)Iar.AsyncState;
            Socket objSocketCliente = objSocketManejador.EndAccept(Iar);

            if (objSocketCliente.Connected)
            {
                NetworkStream objStream = new NetworkStream(objSocketCliente);
                byte[] datosRecibidos = new byte[1024];
                objStream.BeginRead(datosRecibidos, 0, datosRecibidos.Length, new AsyncCallback(DatosRecibidos), objStream);
            }
        }



        private void DatosRecibidos(IAsyncResult Iar)
        {
            NetworkStream objStream = (NetworkStream)Iar.AsyncState;
            int datosLeidos = objStream.EndRead(Iar);
            if (datosLeidos > 0)
            {
                byte[] datosRecibidosAsync = new byte[1024];
                int i = 0;
                while (i <= 0)
                {
                    i = objStream.Read(datosRecibidosAsync, 0, datosRecibidosAsync.Length);
                }
                string cadena = ASCIIEncoding.ASCII.GetString(datosRecibidosAsync);
                listBox1.Items.Add(cadena);
            }

            byte[] datosRecibidos = new byte[1024];
            objStream.BeginRead(datosRecibidos, 0, datosRecibidos.Length, new AsyncCallback(DatosRecibidos), objStream);
        }


Por favor, si alguien tiene tiempo para hecharle un ojo a mi código y dedicarme unos minutos para decirme donde tengo el fallo, le estaría muy agradecido.

Saludos.
__________________
Charlie.
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 08:13.