El servidor TCP simple no puede salir al navegador web

Escribí un progtwig simple de cliente y servidor TCP en lenguaje C.

Funciona bien entre ellos pero tengo una duda.

¿Qué sucede si quisiera acceder al servidor TCP desde el servidor web?

Obtuve los encabezados del servidor web y no puedo write() nuevo en el navegador web. ¿Debería la respuesta estar en especificaciones HTTP obligatoriamente?

Me sale el siguiente error :

introduzca la descripción de la imagen aquí

Código del servidor:

 // Server side C program to demonstrate Socket programming #include  #include  #include  #include  #include  #include  #define PORT 8080 int main(int argc, char const *argv[]) { int server_fd, new_socket; long valread; struct sockaddr_in address; int addrlen = sizeof(address); char buffer[1024] = {0}; char *hello = "Hello from server"; // Creating socket file descriptor if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("In socket"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons( PORT ); // Forcefully attaching socket to the port 8080 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("In bind"); exit(EXIT_FAILURE); } if (listen(server_fd, 3) < 0) { perror("In listen"); exit(EXIT_FAILURE); } while(1) { if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("In accept"); exit(EXIT_FAILURE); } valread = read( new_socket , buffer, 1024); printf("%s\n",buffer ); write(new_socket , hello , strlen(hello)); printf("Hello message sent\n"); } return 0; } 

Salida:

 GET / HTTP/1.1 Host: localhost:8080 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 DNT: 1 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Hello message sent 

¿Cuál es el problema? ¿El navegador también está esperando una respuesta de tipo HTTP del servidor? Como el servidor envía texto sin formato, el navegador web no puede mostrar el contenido. ¿Es este el motivo del error mostrado en el navegador web?

¿Cuál es el problema? ¿El navegador también está esperando una respuesta de tipo HTTP del servidor? Como el servidor envía texto sin formato, el navegador web no puede mostrar el contenido. ¿Es este el motivo del error mostrado en el navegador web?

, el navegador espera una respuesta HTTP.

Aquí una respuesta HTTP simple:

 HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 12 Hello world! 

Fragmento de código C:

 const char *hello = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 12\r\n\r\nHello world!"; 

Partes explicadas:

HTTP/1.1 especifica la versión del protocolo HTTP.

200 OK es el llamado estado de respuesta . 200 significa que no hay error.

Lista de códigos de estado HTTP (wikipedia)

Content-Type y Content-Length son encabezados http:

  • Content-Type refiere al tipo de contenido (¿quién lo hubiera adivinado?). text/plain significa texto text/plain . (También hay text/html , image/png etc.)

  • Content-Length total de la respuesta en bytes.