![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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 ; } |
|
#2
|
||||
|
||||
|
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! - BAScript - Multi Language Scriptable Development Environment |
|
#3
|
||||
|
||||
|
Cita:
![]() Con los componentes indy creo recordar que viene un ejemplo de servidor http
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#4
|
|||
|
|||
|
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. |
|
#5
|
||||
|
||||
|
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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|