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

Problema al obtener mensaje obtenido de un socket C#

Estas en el tema de Problema al obtener mensaje obtenido de un socket C# en el foro de .NET en Foros del Web. Tengan un buen día integrates del foro. Estoy haciendo mis primeros pininos en C# con sockets y acabo de hacer en una clase todos los ...
  #1 (permalink)  
Antiguo 27/06/2007, 00:00
 
Fecha de Ingreso: marzo-2007
Ubicación: En El salvador
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Problema al obtener mensaje obtenido de un socket C#

Tengan un buen día integrates del foro. Estoy haciendo mis primeros pininos en C# con sockets y acabo de hacer en una clase todos los métodos para conectarme a una aplicación servidor y recibir mensajes de dicho servidor, y considero que el código esta bien elaborado, pero tengo un gran problema, y es que no se como extraer el mensaje mandado desde el servidor, y pasarselo al formulario para ser escrito en un textbox o label o algo asi. Este es el código de mi clase:

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

namespace socketProject
{
    class messenger
    {
        public Socket enlace; public System.Net.IPEndPoint wstDestino;
        private AsyncCallback triggerAsincrono; private IAsyncResult estadoEnlace;
        String mensajeFinal;
        
        public string conectarSocket(string puerto, string nombreUsuario, String ipReceptor)
        {
            enlace = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress ip = IPAddress.Parse(ipReceptor);
            int port = Convert.ToInt16(puerto, 10);
            wstDestino = new System.Net.IPEndPoint(ip, port);
            try
            {
                enlace.Connect(wstDestino);
                    byte[] pingueo = System.Text.Encoding.ASCII.GetBytes("Estoy en linea Cisco");
                    enlace.Send(pingueo);
                    return "conectado";
            }
            catch (SocketException errorcito)
            {
                return "desconectado";
            }
        }

        public void esperoDatos()
        {
            if (triggerAsincrono==null)
            {
                triggerAsincrono = new AsyncCallback(recepcionDatos);
            }
            socketilloPack socketTemp = new socketilloPack();
            
            socketTemp.socketillo = enlace;
            estadoEnlace = enlace.BeginReceive(socketTemp.bufferDatos,0,socketTemp.bufferDatos.Length,
                                                 SocketFlags.None,triggerAsincrono,socketTemp.socketillo);
         
        }

        private void recepcionDatos(IAsyncResult condicion)
        {
            socketilloPack socketTemp2 = (socketilloPack)condicion.AsyncState;
            int numBytes = socketTemp2.socketillo.EndReceive(condicion);
            char[] mensajeRecibido = new char[numBytes + 1];
            Decoder decodificador = Encoding.UTF8.GetDecoder();
            int longTexto = decodificador.GetChars(socketTemp2.bufferDatos,0,numBytes,mensajeRecibido,0);
            mensajeFinal = new String(mensajeRecibido);
            esperoDatos();

        }


        String GetIP()
        {
            String strHostName = Dns.GetHostName();

            // Find host by name
            IPHostEntry iphostentry = Dns.GetHostEntry(strHostName);

            // Grab the first IP addresses
            String IPStr = "";
            foreach (IPAddress ipaddress in iphostentry.AddressList)
            {
                IPStr = ipaddress.ToString();
                return IPStr;
            }
            return IPStr;
        }

    }
}
Es decir, lo que no se como hacer es que, desde el formulario, obtener el valor de la variable mensajeFinal, pues el método esperoDatos() llama al método BeginReceive() lo que llama al delegado AsyncCallBack cuando la operación de recepción de datos es efectuada, luego mediante el objeto IAsyncResult y su estado se cierra la recepción de datos para hacer lo que se desee con la matriz de bytes (en mi caso, pasarla a string), y finalmente volver a llamar al metodo esperoDatos() para volver a esperar alguna operació asíncrona, pero no sé como hacer para pasar ese string del mensaje al form ¿Me podrían dar alguna idea? Pues lo que intenté es retornar en esperoDatos() la variable mensajeFinal y hacer la función de tipo string, y mandarla a llamar desde el formulario con el evento textChanged del textBox en el cual deseo imprimir el mensaje, pero no resultó.
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 04:01.