我有一个简单的Java应用程序,它侦听连接,一个客户端连接它发送一个字符串。如果运行服务器并从浏览器发出GET请求,则显示服务器发送的字符串。这很好,但是,如果没有HTTP头,它是如何工作的呢?OutputStream类是否先于Headers?
当我用C#编写相同的代码时,如果没有头文件,它就不能工作,如果没有Headers,浏览器就不会显示发送的字符串。C#的行为是有意义的,那么,我的java代码会发生什么呢?
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();
String bemVindo = "Bem vindo ao nosso primeiro servidor";
streamSaida.write(bemVindo.getBytes());
System.out.println("Desligando o servidor");
clientSocket.close();
server.close();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");
String 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();发布于 2015-09-18 09:55:15
Java不会在使用普通文档时添加任何标题,大多数浏览器都会将发送给它们的数据显示为字符串,如果它们不是其他文档的话。也许您没有关闭C#版本中的连接,所以broswer不知道什么时候完成数据的传输,并且在解释数据之前等待连接的关闭(在您的例子中显示它)。尝试在程序结束时添加呼叫以关闭连接,例如。client.Close();
https://stackoverflow.com/questions/32648708
复制相似问题