Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con 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 Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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 Ñ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.025
Poder: 27
Ñ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.
Responder Con Cita
  #6  
Antiguo 18-11-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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
  #7  
Antiguo 18-11-2010
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.939
Poder: 27
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
  #8  
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
  #9  
Antiguo 22-11-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 09:09:41.


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