No tenia idea que FORK no funcionaba en Windz ya que siempre programe c para Unix. Entonces no se puede cambiar esa parte del codigo por una que funcione en Windwz? Mi idea es que si alguien sabe como que aporte su conocimiento.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCitar//***********************************************************************************************************
//*********************************************** WARANI SERVER ver 0.01 ************************************
//*Este es el codigo de un servidor de paginas HTML basado en codigos de ejercicios de tranferencia de datos*
//*por TCP y otros que dan vueltad por la red. Como se daran cuenta es un servidor minimo pero efectivo el *
//*cual responde bien a las peticiones de los navegadores mas usados lease : Zorro de fuego , Explorador y *
//*el de la manzanita tambien. *
//*De mas esta decir que el codigo esta liverado bajo la norma GPL V2 asi que pueden descargarlo, mejorarlo *
//*(eso es lo primero que deben hacer) y usarlo a gusto. *
//*Acepto sugerencias a este mail: warani_project@hotmail.com *
//***********************************************************************************************************
#ifndef WIN32
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#else //---------------------- Aqui se incluyen los Headers para que funcione en Windwz------//
#include <windows.h>
#include <winsock.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char* ver = "0.01";//------------Esta es la version//
int mi_socket, nuevo, tam;
FILE *archivo;//----------------Puntero de la funcion que abre el archivo//
int caracter;
char* paginaerror = "<html><head><title>Error 404</title></head><body><p>No exixte esa pagina</p></body></html>";//-----Puntero del string error de pagina//
int suma, len;
int auxiliar;
char bufrecv[1024];//----------Buffer para recepcion de datos del cliente//
char bufenv[1024];//-----------Buffer para los datos que se enviaran//
struct sockaddr_in mi_estructura;
struct sockaddr_in dir_remota;
char nombrepag[50];//----------Variable para el nombre de la pagina pedida//
int cont = 0;
printf("\n******************** WARANI SERVER Ver:%s ********************\n", ver);
//------------------------------Inicializa la estructura de conexión-------------------------------------//
mi_estructura.sin_family = AF_INET;
mi_estructura.sin_port =9999;//---------Aqui establecemos el puerto que va a escuchar(para html es el puerto 80//
mi_estructura.sin_addr.s_addr = INADDR_ANY;//---La direccion ip del servidor en este caso localhost//
memset( &(mi_estructura.sin_zero), '\0', 8 );
mi_socket = socket( AF_INET, SOCK_STREAM, 0 );
tam = sizeof( struct sockaddr );
bind( mi_socket, (struct sockaddr *)&mi_estructura, tam );
listen( mi_socket, 5 );//-Comienza la escucha del servidor, se establecen hasta 5 conexiones entrantes//
printf("Escuchando...\n");
while( 1 ) //-------------Bucle infinito para tratar conexiones//
{
nuevo = accept( mi_socket, (struct sockaddr *)&mi_estructura, &tam);//---Acepta conexión entrante//
printf("%s Conectado\n", inet_ntoa(dir_remota.sin_addr)); //-------------Imprime la direccion IP del cliente//
len = recv(nuevo, bufrecv, 1024, 0); //----------------------------------Recibe la peticion del cliente//
bufrecv[len] = '\0';
printf("%s\n", bufrecv);//---------Imprime la peticion del cliente//
auxiliar=0;
while (bufrecv[5+auxiliar] != ' ') //--Aqui se busca despues del GET la pagina pedida//
{
nombrepag[auxiliar] = bufrecv[5 + auxiliar];
auxiliar++;
}
if(auxiliar < 1 ) //--Si la peticion es la pagina prinsipal osea '/' se enviara "index.html"//
strcpy(nombrepag, "index.html");
else
nombrepag[auxiliar] = '\0';
printf("%s\n", nombrepag);
//----------------------Aqui comiensa la sección de envio de datos------------------------//
if( fork() == 0 )
{ // hijo
close( mi_socket ); // El proceso hijo no lo necesita
//-----------Abre el archivo de texto-----------//
if ((archivo = fopen ( nombrepag, "r")) != (FILE *)0)
{
cont = 0;
while ((caracter = getc(archivo)) != EOF)//--Mientras no sea el final del archivo leera un caracter tras otro//
{
bufenv[cont++] = caracter ;
if (cont >= 1024)
{
send (nuevo, bufenv, cont, 0);//---Envia datos al cliente si el Buffer de envio se ha llenado//
cont = 0;
}
}
send (nuevo, bufenv, cont, 0);//---Envia datos al cliente si se llego al final del archivo//
}
else
{
send (nuevo, paginaerror,strlen(paginaerror),0);//---Envia pagina de error 404//
}
fclose(archivo);
close( nuevo );
printf("%d Bytes enviados\n", suma);//----Imprime la cantidad de Bytes enviados//
exit( 0 );
} else { // padre
close( nuevo ); // El proceso padre no lo necesita
}
}
return 0;
}