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

C# 2.0 - Sockets - Navegador Web...

Estas en el tema de C# 2.0 - Sockets - Navegador Web... en el foro de .NET en Foros del Web. Hola buenas tardes, Veran estoy intentando hacer un navegador web (Sin usar el control WebBrowser) y tengo un pequeño problema al recibir la respuesta del ...
  #1 (permalink)  
Antiguo 26/09/2007, 09:08
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 9 meses
Puntos: 7
C# 2.0 - Sockets - Navegador Web...

Hola buenas tardes,

Veran estoy intentando hacer un navegador web (Sin usar el control WebBrowser) y tengo un pequeño problema al recibir la respuesta del servidor. El problema esta en que yo abro el socket, me conecto, envio la cabecera (hasta ahi perfecto), pero una vez enviada, la respuesta... "CREO" que el servidor me esta enviando la respuesta a un puerto diferente o algo asi... la cuestión es que no estoy recibiendo ninguna respuesta y no se por qué...

Aqui les muestro parte del código:
Código:
    public class ClsNavegador
    {        
        public ClsNavegador() {}

        public delegate void DelegadoLlegaronDatos(string txtHtml);
        public event DelegadoLlegaronDatos LlegaronDatos;

        private Socket _objSocket = null;
        private byte[] bytesDatos = new byte[1024];
        public void IrAPagina(string txtUrl)
        {
            IrAPagina(txtUrl, 80);
        }
        public void IrAPagina(string txtUrl, int numPuerto)
        {
            try
            {
                _objSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                _objSocket.Connect(txtUrl, numPuerto);

                if (!_objSocket.Connected)
                    throw new Exception("No se ha podido establecer la conexión con: " + txtUrl);

                byte[] bytesEnviar = Encoding.UTF8.GetBytes(ClsPeticiones.peticionFirefox);
                _objSocket.BeginSend(bytesEnviar, 0, bytesEnviar.Length, SocketFlags.None, new AsyncCallback(DatosEnviado), null);

                _objSocket.BeginReceive(bytesDatos, 0, bytesDatos.Length, SocketFlags.None, new AsyncCallback(DatosRecibidos), _objSocket);
            }
            catch (Exception ex)
            {                
                throw new Exception(ex.Message, ex);
            }
        }


        private void DatosRecibidos(IAsyncResult iAr)
        {
            Socket objSocket = (Socket)iAr.AsyncState;
            objSocket.EndReceive(iAr);

            string txtDatosHtml = Encoding.ASCII.GetString(bytesDatos);
            LlegaronDatos(txtDatosHtml);

            objSocket.BeginReceive(bytesDatos, 0, bytesDatos.Length, SocketFlags.None, new AsyncCallback(DatosRecibidos), objSocket);
        }
        private void DatosEnviado(IAsyncResult iAr)
        {
            _objSocket.EndSend(iAr);
        }
    }





//Esto es de otra clase que es de tipo Estática ee.
        public static string peticionFirefox = "GET /webPrueba/index.aspx HTTP/1.1 \r\n" +
                                               "Host: localhost \r\n" +
                                               "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.7.5) Gecko/20041108 Firefox/1.0 \r\n" +
                                               "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 \r\n" +
                                               "Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3 \r\n" +
                                               "Accept-Encoding: gzip,deflate \r\n" +
                                               "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 \r\n" +
                                               "Keep-Alive: 300 \r\n" +
                                               "Connection: keep-alive \r\n";

Como pueden ver, estoy mandado una cabecera como si fuera un navegador firefox y en fin... la cuestion es que no recibo nada.

En fin, si pueden hecharme un cable, les agradecería la ayuda. Saludos.
__________________
Charlie.
  #2 (permalink)  
Antiguo 26/09/2007, 09:43
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 9 meses
Puntos: 7
Re: C# 2.0 - Sockets - Navegador Web...

Bueno, el asunto esta solucionado, resulta que tenia que poner otro \r\n al final de la variable peticionFirefox.

Sin embargo ahora me salta otro problema. Desde mi aplicacion .NET, recibo respuesta del servidor, y recibo una respuesta de que ha encontrado la pagina solicitada, pero me envia un mensaje asi:
Código:
HTTP/1.1 302 Found
Server: Microsoft-IIS/5.1
Date: Wed, 26 Sep 2007 15:41:35 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: /SINSA_Gestion/listados/localhost
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 150

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/SINSA_Gestion/listados/localhost">here</a>.</h2>
</body></html>
Sin embargo, me conecto al servidor desde TELNET, injecto la cabecera de peticionFirefox, y me devuelve el HTML perfecto correspondiente a la página.

¿Alguien sabe que me puede faltar o que es lo que pasa? Parece como que etngo que pnichar en ese enlace.... pero por que el TELNET lo hace automáticamente? Realmente deberia darme ya la pagina, ¿Verdad?
__________________
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 07:16.