socket 不能向服务端write 第二次

socket并无关闭,为何第二次write() 之后 无读到数据的?

import java.io.*;
import java.net.Socket;

public class MianTest {
public static void main(String args0[]) throws Exception {
Socket socket = new Socket("localhost", 80);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    String header1 = "GET /hello.txt HTTP/1.1\r\nHost: localhost\n\r\n";
    String header2 = "GET /hi.txt HTTP/1.1\r\nHost: localhost\r\n\r\n";

    out.write(header1);

    out.flush();
    int i = 0;
    while ((i = in.read()) != -1) {
        System.out.print((char) i);
    }

            out.write(header2);
    out.flush();
    int c = 0;
    while ((c = in.read()) != -1) {
        System.out.print((char) c);

    }
         socket.close();
}

}
[b]问题补充:[/b]
to liuyu220

我是用socket 向tomcat通讯

服务端完成一次请求完后就关闭了inputstream,output数据回来 这很正常,
而第2次write(),其实有无去到服务端呢?还是服务端认为inputstream关闭了
之后来的数据不需要再读?

有无方法,不 new一个socket ,而发出第2次通讯

[code="java"]int i = 0;
while ((i = in.read()) != -1) {
System.out.print((char) i);
}[/code]

尽管http 1.1 支持长连接, 但还是由上面的代码引起的,它被阻碍了。
只有等待server side阻塞(如timeout),才会跳出循环。

稍微简单修改一下。

[code="java"]Socket socket = new Socket("localhost", 80);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    String header1 = "HEAD /  HTTP/1.1\r\nHost: $host\r\n\r\n";
    String header2 = "HEAD /  HTTP/1.1\r\nHost: $host\r\n\r\n";

    out.write(header1);


    out.flush();

    StringBuffer sb = new StringBuffer();
        while (true) {
                char c = (char) in.read();
                System.out.print(c);
                if(c=='\r' || c=='\n') {
                    sb.append(c);
                }
                else {
                    sb.delete(0, sb.length());
                }
                if(sb.toString().equals("\r\n\r\n")) {
                    break;
                }
        }



        out.write(header2);


        out.flush();
        sb.delete(0, sb.length());
            while (true) {
                    char c = (char) in.read();
                    System.out.print(c);
                    if(c=='\r' || c=='\n') {
                        sb.append(c);
                    }
                    else {
                        sb.delete(0, sb.length());
                    }
                    if(sb.toString().equals("\r\n\r\n")) {
                        break;
                    }
            }

        socket.close();

[/code]

你的serversocket的inputstream没有东西你当然读不出来。
ps:你绑定80端口。不知道你要干嘛

好像这么写会有问题。 你可以吧输入输出流关闭了,再次打开。

客户端的inputstream,outputstream与服务端的inputstream,outputstream是两端通信的通道,通道关了就不能通信了。