Autor
|
Tema: Socket c++ server y navegador web (chrome)... (Leído 6,247 veces)
|
shiro51
Desconectado
Mensajes: 12
|
Hola buenas noches, vengo aqui a solicitar algo de información ya que no encuentro en Internet nada relacionado... Me meti en el desarrollo de sockets en c++, y consegui conectar el navegador web al server socket, (muy facil...), pero ahora no se como responderle al navegador web y enviarle la informacion necesaria y el html correspondiente, espero que me podais ayudar... ya que esto es un problema demasiado facil y me da verguenza publicar algo tan tonto... xDD Dejo imagen de la cabecera http y el server... Gracias.
|
|
« Última modificación: 16 Abril 2012, 23:25 pm por shiro51 »
|
En línea
|
|
|
|
|
shiro51
Desconectado
Mensajes: 12
|
Este es el codigo completo, apenas lo toque del original, porque estuve comprimiendo el cliente y el server lo he dejado un poco apartado hasta ahora xDDD #include <winsock2.h> //la cabezera para usar las funciones de winsock #include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main() { WSADATA wsa; SOCKET sock; struct sockaddr_in local; int len=0; char Buffer[1024]; char HTML[1024] = "<html> <body> Hola como estas?</body></html>"; //Inicializamos WSAStartup(MAKEWORD(2,0),&wsa); //Creamos el socket sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//defnimos dirección por defecto, ipv4 y el puerto 9999 local.sin_family = AF_INET; local.sin_addr.s_addr = INADDR_ANY; local.sin_port = htons(9999);
//asociamos el socket al puerto if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1) { printf("error en el bind\n"); return -1; }
//ponemos el socket a la escucha if (listen(sock,1)==-1) { printf("error en el listen\n"); return -1; } len=sizeof(struct sockaddr);
//hay una conexión entrante y la aceptamos sock=accept(sock,(sockaddr*)&local,&len);
while (len!=0) //mientras estemos conectados con el otro pc { len=recv(sock,Buffer,1023,0); //recibimos los datos que envie
if (len>0) //si seguimos conectados { Buffer[len]=0; //le ponemos el final de cadena puts(Buffer); //imprimimos la cadena recibida if(strcmp (Buffer,"12412412412Hola\n") == 0) { puts("Muy bien!"); send(sock, inet_ntoa(local.sin_addr), strlen(inet_ntoa(local.sin_addr)), 0); } send(sock, "HTTP/1.1 200 OK\r\n", strlen("HTTP/1.1 200 OK\r\n"), 0); send(sock, "Content-Type: text/html\r\n", strlen("Content-Type: text/html\r\n"), 0); send(sock, "Content-Length: 1024\r\n", strlen("Content-Length: 1024\r\n"), 0); send(sock, "\r\n", strlen("\r\n"), 0); send(sock, "<html><body>Hola mundo</body></html>", strlen("<html><body>Hola mundo</body></html>"), 0); } }
return 0; }
|
|
|
En línea
|
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
El código tendría que funcionar... lo acabo de probar y funciona bien, querés agregarle mas cosas? no entiendo el problema...
|
|
« Última modificación: 17 Abril 2012, 01:00 am por <[(x)]> »
|
En línea
|
<[(x)]>
|
|
|
shiro51
Desconectado
Mensajes: 12
|
A mi no me funciona, el navegador se conecta me envia su cabecera le envio la mia pero no me muestra el "Hola mundo" en el navegador web...
Quiero que chrome por ejemplo se conecte a mi server y le envie el html y se muestre en el navegador el html que envia mi server...
|
|
|
En línea
|
|
|
|
shiro51
Desconectado
Mensajes: 12
|
Mini avance... si le envio lo que me envia el navegador... se queda esperando procesando informacion... he probado mandando lo mismo que el navegador y mandando: strncat (HTML, "GET /index.html HTTP/1.1\n", strlen(HTML) + strlen("GET /index.html HTTP/1.1\n")); strncat (HTML, "Accept: */*\n", strlen(HTML) + strlen("Accept: */*\n")); strncat (HTML, "Accept-Language: es\n", strlen(HTML) + strlen("Accept-Language: es\n")); strncat (HTML, "Accept-Encoding: gzip, deflate\n", strlen(HTML) + strlen("Accept-Encoding: gzip, deflate\n")); strncat (HTML, "User-Agent: Mozilla/5.0 (compatible; MSIE 5.01; Windows NT)\n", strlen(HTML) + strlen("User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)\n")); strncat (HTML, "Host: 127.0.0.1n", strlen(HTML) + strlen("Host: 127.0.0.1\n")); strncat (HTML, "Connection: Keep-Aliven\n", strlen(HTML) + strlen("Connection: Keep-Aliven\n")); Pero falta algo... #include <winsock2.h> //la cabezera para usar las funciones de winsock #include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main() { WSADATA wsa; SOCKET sock; struct sockaddr_in local; int len=0; char Buffer[1024]; char HTML[1024] = ""; //strncat (HTML, "GET /index.html HTTP/1.1\r\n", strlen(HTML) + strlen("GET /index.html HTTP/1.1\r\n\n")); //strncat (HTML, "Accept: */*\r\n", strlen(HTML) + strlen("Accept: */*\r\n")); //strncat (HTML, "Accept-Language: es\r\n", strlen(HTML) + strlen("Accept-Language: es\r\n")); //strncat (HTML, "Accept-Encoding: gzip, deflate\r\n", strlen(HTML) + strlen("Accept-Encoding: gzip, deflate\r\n")); //strncat (HTML, "User-Agent: Mozilla/5.0 (compatible; MSIE 5.01; Windows NT)\r\n", strlen(HTML) + strlen("User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)\r\n")); //strncat (HTML, "Host: 127.0.0.1\r\n", strlen(HTML) + strlen("Host: 127.0.0.1\r\n")); //strncat (HTML, "Connection: Keep-Aliven\r\n\r\n\n", strlen(HTML) + strlen("Connection: Keep-Aliven\r\n\r\n")); //strncat (HTML, "<html><body>Hola mundo</body></html>", strlen(HTML) + strlen("<html><body>Hola mundo</body></html>")); strncat (HTML, "HTTP/1.1 200 OK\r\n", strlen(HTML) + strlen("HTTP/1.1 200 OK\r\n")); strncat (HTML, "GET /index.html HTTP/1.1\r\n", strlen(HTML) + strlen("GET /index.html HTTP/1.1\r\n\n")); strncat (HTML, "Accept: */*\r\n", strlen(HTML) + strlen("Accept: */*\r\n")); strncat (HTML, "Cache-Agent: max-age=0\r\n", strlen(HTML) + strlen("Cache-Agent: max-age=0\r\n")); strncat (HTML, "Accept-Language: es-ES\r\n", strlen(HTML) + strlen("Accept-Language: es\r\n")); strncat (HTML, "Accept-Encoding: gzip, deflate\r\n", strlen(HTML) + strlen("Accept-Encoding: gzip, deflate\r\n")); strncat (HTML, "User-Agent: Mozilla/5.0 (compatible; MSIE 5.01; Windows NT)\r\n", strlen(HTML) + strlen("User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)\r\n")); strncat (HTML, "Host: 127.0.0.1\r\n", strlen(HTML) + strlen("Host: 127.0.0.1\r\n")); strncat (HTML, "Connection: Keep-Aliven\r\n", strlen(HTML) + strlen("Connection: Keep-Aliven\r\n")); strncat (HTML, "Content-Type: text/html\r\n\r\n", strlen(HTML) + strlen("Content-Type: text/html\r\n\r\n")); int num = 0; //Inicializamos WSAStartup(MAKEWORD(2,0),&wsa); //Creamos el socket sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//defnimos dirección por defecto, ipv4 y el puerto 9999 local.sin_family = AF_INET; local.sin_addr.s_addr = INADDR_ANY; local.sin_port = htons(9999);
//asociamos el socket al puerto if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1) { printf("error en el bind\n"); return -1; }
//ponemos el socket a la escucha if (listen(sock,1)==-1) { printf("error en el listen\n"); return -1; } len=sizeof(struct sockaddr);
//hay una conexión entrante y la aceptamos sock=accept(sock,(sockaddr*)&local,&len); while(len >= -1) { len=recv(sock,Buffer,1023,0); //recibimos los datos que envie
if (len>0) //si seguimos conectados { Buffer[len]=0; //le ponemos el final de cadena puts(Buffer); //imprimimos la cadena recibida send(sock, HTML, strlen(HTML), 0); send(sock, "<html><body>Hola mundo</body></html>", strlen("<html><body>Hola mundo</body></html>"), 0); puts(HTML); if(strcmp (Buffer,"12412412412Hola\n") == 0) { puts("Muy bien!"); send(sock, inet_ntoa(local.sin_addr), strlen(inet_ntoa(local.sin_addr)), 0); } } }
return 0; }
|
|
« Última modificación: 17 Abril 2012, 16:53 pm por shiro51 »
|
En línea
|
|
|
|
shiro51
Desconectado
Mensajes: 12
|
#include <iostream> //pause... #include <stdio.h> //gets printf... #include <string.h> //if #include <time.h> #include <process.h>
#include <winsock2.h> //sockets #pragma comment(lib,"ws2_32.lib") SOCKET sock; char Buffer[1024]; char HTML[1024];
void wait ( int seconds ) { clock_t endwait; endwait = clock () + seconds * CLOCKS_PER_SEC ; while (clock() < endwait) {} }
void thread(void *arg) { }
int main() { WSADATA wsa;
struct sockaddr_in direc; int conex;
int len = 0; strncat (HTML, "GET /index.php HTTP/1.1 \r\n", strlen("GET /index.html HTTP/1.1 \r\n")); strncat (HTML, "Host: elhacker.net:80\r\n", strlen("Host: elhacker.net:80\r\n")); strncat (HTML, "Connection: keep-alive\r\n", strlen("Connection: keep-alive\r\n")); strncat (HTML, "User-Agent: Mozilla/5.0 <Windows NT 6.1> AppleWebKit/535.19 <KHTML, Like Gecko>\r\n", strlen("User-Agent: Mozilla/5.0 <Windows NT 6.1> AppleWebKit/535.19 <KHTML, Like Gecko>\r\n")); strncat (HTML, "Chrome/18.0.1025.162 Safari/535.19\r\n", strlen("Chrome/18.0.1025.162 Safari/535.19\r\n")); strncat (HTML, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n", strlen("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n")); strncat (HTML, "Accept-Encoding: gzip,deflate,sdch\r\n", strlen("Accept-Encoding: gzip,deflate,sdch\r\n")); strncat (HTML, "Accept-Language: es-ES,es;q=0.8\r\n", strlen("Accept-Language: es-ES,es;q=0.8\r\n")); strncat (HTML, "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n", strlen("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"));
WSAStartup(MAKEWORD(2,2),&wsa);
direc.sin_family=AF_INET; direc.sin_port=htons(80); direc.sin_addr = *((struct in_addr *)gethostbyname("46.105.119.93")->h_addr); memset(direc.sin_zero,0,8);
if ((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1) { printf("Error al crear el socket"); return -1; }
if ((conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr)))==-1) { printf("No se ha podido conectar\n"); fgets(Buffer,1023, stdin); return -1; }else{ puts("conexion establecida..."); //_beginthread(thread, 5, 0); }
while (len!=-1) {
puts(HTML); send(sock, HTML, strlen(HTML), 0); recv(sock,Buffer,1023,0); puts(Buffer);
system("pause"); return 0; }
return 0; }
Con este envio una cabecera como si fuera el navegador a un server de internet, y espero su cabecera http para saber como debe ser la mia, pero el problema es que "imitando" a chrome con la cabecera que el me manda, me dice 400 bad request, request header field is missing ":" A ver si me podeis decir el problema...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Actualización para el navegador Google Chrome
Noticias
|
wolfbcn
|
0
|
1,459
|
30 Abril 2010, 13:39 pm
por wolfbcn
|
|
|
Baidu lanza un navegador muy similar a Chrome
Noticias
|
wolfbcn
|
0
|
1,573
|
21 Julio 2011, 13:19 pm
por wolfbcn
|
|
|
Chrome 16 ya es el navegador más usado en el mundo
Noticias
|
wolfbcn
|
2
|
2,320
|
11 Marzo 2012, 22:52 pm
por Stoya
|
|
|
problema server socket thread
Java
|
momo1234
|
1
|
3,037
|
12 Mayo 2012, 17:20 pm
por momo1234
|
|
|
¿Se ha ralentizado el navegador Chrome?
Noticias
|
wolfbcn
|
3
|
2,241
|
13 Noviembre 2012, 00:54 am
por Martin-Ph03n1X
|
|