我有一个简单的 Java TCP服务器应用程序,它监听连接,一个客户端连接它发送一个字符串。如果我运行服务器并从浏览器发出GET请求,则显示服务器发送的字符串。这很棒,但是,没有HTTP标头它是如何工作的? OutputStream 类是否在前面加上HTTP标头?
当我在 C#中编写相同的代码时,如果没有Headers,它就无法工作,如果没有预先添加HTTP头,则浏览器不会显示已发送的字符串。 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();
答案 0 :(得分:0)
当您使用普通的socekts时,Java不会添加任何标头,如果它们不是其他文档,则大多数浏览器会将您发送给它们的数据显示为字符串。 也许你不会在C#版本中关闭连接,因此,broswer不知道你何时完成数据传输,并且在解释数据之前等待连接结束(在你的情况下显示它)。尝试添加调用以在程序结束时关闭连接,例如。 client.Close();