| 
	
		|  Autor | Tema: Socket c++ server y navegador web (chrome)...  (Leído 6,684 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,822 |  30 Abril 2010, 13:39 pm por wolfbcn
 |  
						|   |   | Baidu lanza un navegador muy similar a Chrome Noticias
 | wolfbcn | 0 | 1,926 |  21 Julio 2011, 13:19 pm por wolfbcn
 |  
						|   |   | Chrome 16 ya es el navegador más usado en el mundo Noticias
 | wolfbcn | 2 | 2,891 |  11 Marzo 2012, 22:52 pm por Stoya
 |  
						|   |   | problema server socket thread Java
 | momo1234 | 1 | 3,211 |  12 Mayo 2012, 17:20 pm por momo1234
 |  
						|   |   | ¿Se ha ralentizado el navegador Chrome? Noticias
 | wolfbcn | 3 | 2,958 |  13 Noviembre 2012, 00:54 am por Martin-Ph03n1X
 |    |