En-têtes HTTP automatiques Java sur OutputStream

J’ai une application Java TCP Server simple qui écoute les connexions et un client qui se connecte envoie une chaîne. Si je lance le serveur et effectue une requête GET depuis un navigateur, la chaîne envoyée par le serveur est affichée. C’est génial, mais comment cela fonctionnait-il sans les en-têtes HTTP? La classe OutputStream ajoute -t-elle les en-têtes HTTP?

Lorsque j’écris le même code en C # , cela ne fonctionne pas sans les en-têtes, les navigateurs n’affichent pas la chaîne envoyée si aucun en-tête HTTP n’a été ajouté. Le comportement C # a du sens, alors, que se passe-t-il avec mon code Java?

Code Java

ServerSocket server = new ServerSocket(8080); System.out.println("Servidor iniciado.\naguardando a conexao de um cliente..."); Socket clientSocket = server.accept(); System.out.println("Um cliente conectou-se ao nosso servidor Socket TCP"); OutputStream streamSaida = null; //Obter a referencia do stream de saida do cliente conectado. streamSaida = clientSocket.getOutputStream(); Ssortingng bemVindo = "Bem vindo ao nosso primeiro servidor"; streamSaida.write(bemVindo.getBytes()); System.out.println("Desligando o servidor"); clientSocket.close(); server.close(); 

Code C #

 System.Net.Sockets.TcpListener server = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Loopback, 8080); server.Start(); Console.WriteLine("Servidor TCP iniciado"); Console.WriteLine("Aguardando conexao de um cliente..."); Socket client = server.AcceptSocket(); Console.WriteLine("Um cliente conectou-se ao servidor"); Ssortingng msg = "Bem-vindo ao nosso servidor TCP C#"; //Mensagem de boas vindas NetworkStream streamCliente = new NetworkStream(client); System.IO.StreamWriter writer = new System.IO.StreamWriter(streamCliente); writer.Write(msg); writer.Flush(); 

Java ne fait pas précéder les en-têtes lorsque vous utilisez des scripts simples, la plupart des navigateurs affichent les données que vous leur envoyez sous forme de chaîne s’ils ne sont pas d’autres documents. Peut-être que vous ne fermez pas la connexion dans la version C #, broswer ne sait pas quand vous avez fini de transférer vos données et attend la fermeture de la connexion avant l’interprétation des données (affichage dans votre cas). Essayez d’append un appel pour fermer votre connexion à la fin de votre programme, par exemple. client.Fermer ();