Código:
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ó. 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; } } }