OutputStream

时间:2015-09-18 09:36:29

标签: java c# sockets http server

我有一个简单的 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();

1 个答案:

答案 0 :(得分:0)

当您使用普通的socekts时,Java不会添加任何标头,如果它们不是其他文档,则大多数浏览器会将您发送给它们的数据显示为字符串。 也许你不会在C#版本中关闭连接,因此,broswer不知道你何时完成数据传输,并且在解释数据之前等待连接结束(在你的情况下显示它)。尝试添加调用以在程序结束时关闭连接,例如。 client.Close();