Ejercicio BSD Sockets

Iniciado por Gonzi_Malaga, 5 Noviembre 2015, 12:21 PM

0 Miembros y 1 Visitante están viendo este tema.

Gonzi_Malaga

Buenas! Estoy con una puñetera práctica de Erasmus que tenemos que hacer sin que nos expliquen nada... alguno sabría como cojones hacer esto? porque ni siquiera en google encuentro nada...

Create C/C++ program for UNIX operating system using BSD sockets which will download specified object (page,
picture, generally any file) from WWW server.
· Final program should be compiled into filename called download.
· Create makefile which can be used for automatic compilation of source file(s)
by typing make statement in UNIX shell.
· Downloaded file will have name as presented in URL or index.html for default
index page.


Graciaaaaas!

ivancea96

Esto son y así se usan los sockets BSD: http://wiki.treck.com/Introduction_to_BSD_Sockets
Por lo demás, descargar un archivo o página de una web, y guardarla en un fichero.

Para descargar de la web, necesitarás conocer el protocolo HTTP. Busca acerca de él, o mira algún ejemplo, como https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_message

Te toca trabajarlo. La complejidad de este problema en mi opinión se centra en:
-1: Controlar los sockets: abrirlos, enviar datos, recibir datos
-2: Controlar el protocolo HTTP: Pedir al servidor, recibir datos del servidor
-3: Los datos recibidos del servidor, tendrán que ser separados entre cabecera y cuerpo. Lo que pondrás en el archivo, es el cuerpo, así que separarlos correctament ees esencial.

Como datos en los que fijarte del protocolo HTTP, decir que el campo "content-length" de la cabecera, te dice el tamaño del cuerpo en bytes, y que el cuerpo comienza a partir de 2 saltos de linea contiguos ("\r\n\r\n").

Si tienes más problemas, comenta.

Gonzi_Malaga

Pero el procedimiento a seguir cual sería?
abro el socket
envio que dato?
como lo recibo?

Ando muy perdido en C y con sockets mas aun y leo que send es para TCP y UDP me pierdo... (HTTP era con TCP?)

ivancea96

Sí, HTTP es TCp. Envías la petición, y luego esperas la respuesta.
Busca por ahí información sobre el protocolo HTTP.
Si quieres un ejemplo más en vivo, puedes ver las peticiones que envía el navegador, y las respuestas. Para ello, en Firefox por ejemplo, le das a "Inspeccionar elemento" en el menú del botón secundario del ratón, y vas a "Red".

En resumen, primero trata de abrir un socket TCP. Luego, mira acerca del protocolo HTTP.