Duda socket
Publicado por c#dubitativo (2 intervenciones) el 24/01/2008 17:40:22
Hola a todos, estoy realizando una apliación que me lee correctamente los datos de un host con dirección www.nombrehost.dominio (por ejemplo: www.google.es) utilizando las clases DNS, IPEndPoint, Socket... todo lo necesario. El problema viene si trato de leer algo como www.telefonica.net/web/web18/f.txt, es decir, que no acabe en .es, .com... averiguo correctamene la direccion IP de www.telefonica.net (en formato IPv4, es decir, con cuatro octetos, en este caso 213.4.130.95), pero no se donde meter "/web/web18/f.txt". El codigo que me funciona para leer un .es, .com, etc es el siguiente:
//String con la dirección del host y variable que
//almacenar los datos devueltos por este
string host = "www.google.es";
string datos = "";
//Obtengo la IP del host (devuelta en un array)
IPHostEntry ip = Dns.GetHostEntry(host);
//Creo un punto ipendpoint y un socket para conectarme
//a ella. Omito un bucle (foreach) para recorrer todas las
//ip's y hacer así el ejemplo más corto, me conecto a la
//primera ip del array ([0])
IPEndPoint ipe=new IPEndPoint(ip.AddressList[0],80);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//String con la petición al host
string peticion = "GET / HTTP/1.1 Host: " + host + " Connection: Close ";
//Arrays para trabajar con el socket. Uno para enviar la petición
//y otro para recibir los datos devueltos (por el socket)
Byte[] bytesEnviados = Encoding.ASCII.GetBytes(peticion);
Byte[] bytesRecibidos = new Byte[256];
//Conexión del socket (al ipendpoint "ipe")
s.Connect(ipe);
//Envio de la petición al servidor
s.Send(bytesEnviados, bytesEnviados.Length, 0);
//Bucle para recoger los datos devueltos
int bytes;
do{
bytes = s.Receive(bytesRecibidos, bytesRecibidos.Length, 0);
datos += Encoding.ASCII.GetString(bytesRecibidos);
}while (bytes > 0);
//A partir de aqui se tratarian los datos almacenados en
//la varible "datos"
¿Que parte del codigo habria que modificar para leer el fichero de texto alojado en www.telefonica.net/web/web18/f.txt?
Ya se que para un fichero de texto hay soluciones más sencillas que esta (con WebRequest y StreamReader por ejemplo), pero estoy empezando con esto de los sockets y seria para otra tarea mas compleja. Muchas gracias a todos.
//String con la dirección del host y variable que
//almacenar los datos devueltos por este
string host = "www.google.es";
string datos = "";
//Obtengo la IP del host (devuelta en un array)
IPHostEntry ip = Dns.GetHostEntry(host);
//Creo un punto ipendpoint y un socket para conectarme
//a ella. Omito un bucle (foreach) para recorrer todas las
//ip's y hacer así el ejemplo más corto, me conecto a la
//primera ip del array ([0])
IPEndPoint ipe=new IPEndPoint(ip.AddressList[0],80);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//String con la petición al host
string peticion = "GET / HTTP/1.1 Host: " + host + " Connection: Close ";
//Arrays para trabajar con el socket. Uno para enviar la petición
//y otro para recibir los datos devueltos (por el socket)
Byte[] bytesEnviados = Encoding.ASCII.GetBytes(peticion);
Byte[] bytesRecibidos = new Byte[256];
//Conexión del socket (al ipendpoint "ipe")
s.Connect(ipe);
//Envio de la petición al servidor
s.Send(bytesEnviados, bytesEnviados.Length, 0);
//Bucle para recoger los datos devueltos
int bytes;
do{
bytes = s.Receive(bytesRecibidos, bytesRecibidos.Length, 0);
datos += Encoding.ASCII.GetString(bytesRecibidos);
}while (bytes > 0);
//A partir de aqui se tratarian los datos almacenados en
//la varible "datos"
¿Que parte del codigo habria que modificar para leer el fichero de texto alojado en www.telefonica.net/web/web18/f.txt?
Ya se que para un fichero de texto hay soluciones más sencillas que esta (con WebRequest y StreamReader por ejemplo), pero estoy empezando con esto de los sockets y seria para otra tarea mas compleja. Muchas gracias a todos.
Valora esta pregunta


0