Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2010
mcw_nico mcw_nico is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
mcw_nico Va por buen camino
Como crear un servidor http de varios tiros ??

Buenas, soy nuevo en el foro.. pero es mas que seguro de que voy a seguir por aca..
Soy estudiante de un colegio industrial, y tengo como tarea, hacer un servidor http de varios tiros con delphi. La instruccion que me dan en el colegio es muy poca, y es mas, hay muchos profesores que no saben nada.. asique nose como hacerlo.
Si alguno me puede dar una mano, seria espectacular : )
desde ya gracias.
Responder Con Cita
  #2  
Antiguo 18-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.102
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, bienvenido a clubdelphi, te aconsejo que leas nuestra guía de estilo para poder entendernos mejor.

En cuanto a tu problema, ¿en qué parte del proyecto necesitas ayuda?, ¿qué llevas hecho?, ¿qué problema exactamente tienes?.

Por cierto, no entiendo tu expresión de hacer un servidor http "de varios tiros"
Responder Con Cita
  #3  
Antiguo 18-11-2010
mcw_nico mcw_nico is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
mcw_nico Va por buen camino
en todo ^^ .. lo unico que tenemos es un codigo en c (siendo que nunca vimos c) que es de un solo tiro ..
con varios tiros se refiere a que se puedan hacer varias peticiones y respuestas sin cerrar el servidor..
necesitaria saber que es lo que tiene que tener este proyecto.. como tendria que ser la estructura.
Responder Con Cita
  #4  
Antiguo 18-11-2010
mcw_nico mcw_nico is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
mcw_nico Va por buen camino
el codigo de c es el siguiente y es solo un ejemplo :
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <windows.h>
#include <winsock.h>


//---------------------------------------------------------------------------
char SendBuff[2048],RecvBuff[2048];

#pragma argsused
int main(int argc, char* argv[])
{
WSADATA wsaData;
SOCKET conn_socket,comm_socket;
//SOCKET comunicacion;
struct sockaddr_in server;
struct sockaddr_in client;
struct hostent *hp;
int resp,stsize;

//Inicializamos la DLL de sockets
resp = ::WSAStartup(MAKEWORD(2,2),&wsaData);
if( resp )
{
printf("Error al inicializar socket\n");
getchar();
return resp;
}

//Obtenemos la IP que usará nuestro servidor...
// en este caso localhost indica nuestra propia máquina...
hp = (struct hostent *)::gethostbyname("localhost");

if (!hp )
{
printf("No se ha encontrado servidor...\n");
getchar();
::WSACleanup();
return ::WSAGetLastError();
}

// Creamos el socket...
conn_socket = ::socket(AF_INET,SOCK_STREAM, 0);
if ( conn_socket==INVALID_SOCKET )
{
printf("Error al crear socket\n");
getchar();
::WSACleanup();
return ::WSAGetLastError();
}

// Asociamos ip y puerto al socket
memset(&server, 0, sizeof(server)) ;
memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
server.sin_family = hp->h_addrtype;
server.sin_port = htons(6000);

resp = ::bind(conn_socket, (struct sockaddr *)&server, sizeof(server));
if ( resp == SOCKET_ERROR)
{
printf("Error al asociar puerto e ip al socket\n");
::closesocket(conn_socket);
::WSACleanup();
getchar();
return ::WSAGetLastError();
}

// Listen ...
if ( ::listen(conn_socket, 1) == SOCKET_ERROR)
{
printf("Error al habilitar conexiones entrantes\n");
::closesocket(conn_socket);
::WSACleanup();
getchar();
return ::WSAGetLastError();
}

// Aceptamos conexiones entrantes
printf("Lite HTTP Server v 0.01 , esperando conexiones entrantes... \n");
stsize = sizeof(struct sockaddr);

comm_socket = ::accept(conn_socket,(struct sockaddr *)&client,&stsize);
if ( comm_socket == INVALID_SOCKET)
{
printf("Error al aceptar conexión entrante\n");
::closesocket(conn_socket);
::WSACleanup();
getchar();
return ::WSAGetLastError();
}

// Identificamos al cliente ...
printf("Conexión entrante desde: %s\n", inet_ntoa(client.sin_addr));

// Como no vamos a aceptar más conexiones cerramos el listen socket ...
::closesocket(conn_socket);


// Recibimos la peticion HTTP ...
//
printf("HTTP Request... \n\n");
::recv (comm_socket, RecvBuff, sizeof(RecvBuff), 0);
printf("Datos recibidos:\n %s \n", RecvBuff);

//Enviamos la respuesta HTTP...
//
char httpStartLine[] = "HTTP/1.1 200 OK\r\n" ;
char httpHeaderDate[] = "Date: Vie, 17 Set 2010 13:05:59 GMT\r\n" ;
char httpHeaderContentType[] = "Content-Type: text/html\r\n" ;
char httpHeaderContentLength[] = "Content-Length: %d\r\n" ;
char blankLine[] = "\r\n" ;
char httpBody[] = "<html><body><h1>LiteHttp ( one shot http server )"
" Welcome Page</h1></body></html>" ;
char httpResponse[ 4096 ] = { "\0" } ;

strcpy( httpResponse, httpStartLine ) ;
strcat( httpResponse, httpHeaderDate ) ;
strcat( httpResponse, httpHeaderContentType ) ;

int contentLenght = strlen( httpBody ) ;
sprintf( httpHeaderContentLength, "Content-Length: %d\r\n", contentLenght ) ;
strcat( httpResponse, httpHeaderContentLength ) ;

strcat( httpResponse, blankLine ) ;
strcat( httpResponse, httpBody ) ;

// Respuesta Enviada ...
printf("Respuesta enviada ...\n\n" );
printf("%s\n\n", httpResponse );

printf("Enviando http response... \n\n");
::send (comm_socket, httpResponse, sizeof(httpResponse), 0);

getchar();

// Cerramos el socket de la comunicacion
::closesocket(comm_socket);

// Cerramos liberia winsock
::WSACleanup();

return 0 ;
}
Responder Con Cita
  #5  
Antiguo 18-11-2010
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por mcw_nico Ver Mensaje
en todo ^^ ..
Lo que tienes que hacer es primero que todo, entender el protocolo HTTP:

http://www.tutorialspoint.com/http/index.htm

http://www.jmarshall.com/easy/http/

De forma simple, debes entender que HTTP es un protocolo de texto plano. Que se basa en urls y que posee varios verbos (VERBS) los cuales son:

GET (leer)
POST (postear: en términos reales, mezcla tanto crear, actualizar y borrar, pero debería ser solo actualizar)
PUT (crear)
DELETE (borrar)
HEAD (solicitar encabezado)

y otros menos usados.


Implementar un servidor es en terminos generales, responder a solicitudes de GET, POST, etc y retornar ya sea archivos, datos, lo que sea, codificado en formatos de texto.

Un ejemplo mas o menos completo:

http://delphiallimite.blogspot.com/2...synapse-3.html
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 18-11-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por mcw_nico Ver Mensaje
el codigo de c es el siguiente y es solo un ejemplo :
[...]
Una puntualización: eso no es C, es C++. Es que no es lo mismo (por ejemplo, a mi me gusta bastante C pero aborrezco C++ con toda mi alma, al igual que varios colegas que conozco).

Por otro lado, procura utilizar las etiquetas [code]..[/code] cuando escribas código fuente, porque se ve más claro. También puedes utilizar los botones , , y , dependiendo del lenguaje que utilices (el primero es genérico).

Finalmente, y ya haciendo referencia a tu pregunta, tienes varias formas de manejar esto. Sin haber pensado mucho se me ocurre que la más sencilla (que no simple) sería un bucle que va despachando las conexiones una a una, mientras que la más simple (que no sencilla) sería utilizando distintos hilos de ejecución, una por conexión.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #7  
Antiguo 18-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.102
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Una puntualización: eso no es C, es C++. Es que no es lo mismo (por ejemplo, a mi me gusta bastante C pero aborrezco C++ con toda mi alma, al igual que varios colegas que conozco).[..]
Estoy de acuerdo con eso, me gusta C, no me gusta C++

Con los componentes indy creo recordar que viene un ejemplo de servidor http
Responder Con Cita
  #8  
Antiguo 19-11-2010
mcw_nico mcw_nico is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
mcw_nico Va por buen camino
no tengo muchos conocimientos sobre lenguajes de programacion ... se delphi pero hasta ahi nomas... lo que necesitaria es saber que cosas tiene que tener el soft.. los pasos de las cosas que tengo que hacer(no el codigo) el codigo me lo rebusco yo ... ( ya seria pedir el soft sino).
Una cosa que me dijo el profesor es que tiene que ser un "servidor http lite" que soporte Cgi e Isapi.
Responder Con Cita
  #9  
Antiguo 19-11-2010
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Eso lo haces con delphi facil.

Para entender el asunto, lee los enlaces que te pase. Mirando el codigo de ejemplo o mirando los ejemplos instalados en la carpeta de indy (que a proposito tiene un servidor web completo) deberia bastar.

Lo mejor para estas cosas es arrancar. Empieza a hacer el proyecto y lo vas manejando de a pasos. Pon una lista de lo que necesitas hacer y apagate a ella.
__________________
El malabarista.
Responder Con Cita
  #10  
Antiguo 22-11-2010
mcw_nico mcw_nico is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
mcw_nico Va por buen camino
En el ejemplo que me pasaste del blogspot habla de una libreria synapse. Con que delphi viene esta libreria?
pd. Disculpen por mi ignorancia ^^,
Responder Con Cita
  #11  
Antiguo 22-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.102
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sólo has de poner "synapse" en google y darle al botón buscar

Aquí tienes el enlace: http://www.ararat.cz/synapse/doku.php/download
Responder Con Cita
  #12  
Antiguo 09-12-2010
mcw_nico mcw_nico is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
mcw_nico Va por buen camino
como podria hacer los siguiente ??
*habilitar libreria socket;
*crear socket;
*bindearlo con datos de ip y port;
*habilitarlo para escuchar peticiones entrantes;
*Ponerlo a escuchar
Des pues de todo eso cuando recibe la peticion entrante:
*generar un socket con la entrada;
*recibir la peticion;
*obtener el metodo;
*responder segun el metodo al cual pertenezca;
*volver a ponerlo a la escucha el socket
Responder Con Cita
  #13  
Antiguo 09-12-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.102
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Las preguntas una a una, y cada pregunta debe ir en un hilo/tema nuevo
Lee nuestra guía de estilo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
servidor http (idhttp) con pascalscript (remobjects) JXJ Varios 0 28-11-2009 18:33:38
Como crear varios panels Lupita Varios 2 17-07-2008 09:27:02
¿Cómo crear una DLL con varios formularios? Javi2 Varios 3 25-05-2006 10:35:06
Como crear un web hosting en mi servidor dcmorell Internet 0 14-01-2006 21:46:00
MozPHP: PHP sin servidor HTTP ... kinobi PHP 0 03-09-2003 11:19:52


La franja horaria es GMT +2. Ahora son las 20:48:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi