package com.tomcat.main;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;import com.tomcat.pojo.Request;
import com.tomcat.pojo.Response;public class HttpServer {

private ServerSocket serverSocket;

public HttpServer() throws Exception{
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("127.0.0.1", 8080));
}

public void await() throws Exception{

while(true){
 Socket socket = serverSocket.accept();
 System.out.println(socket.getPort());
 InputStream inputStream = socket.getInputStream();
 OutputStream outputStream = socket.getOutputStream();
 Request request = new Request(inputStream);
 request.parseInputStream();
}

}

public static void main(String[] args) throws Exception{

HttpServer httpServer = new HttpServer();
httpServer.await();

}
}
package com.tomcat.pojo;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class Request {

private InputStream inputStream;
private String context; public Request(InputStream inputStream){

this.inputStream =inputStream;
context = new String();
}

public void parseInputStream() throws IOException{

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
int c = -1;
while((c = reader.read())!=-1){
builder.append((char)c);
}
System.out.println(builder.toString());

}

}
上面是代码,为什么request类中的parseInputStream中的System.out.println(builder.toString());
没有执行,没有报错,问题出在哪里socket

解决方案 »

  1.   

    Socket socket = serverSocket.accept();
    在这句话的前后分别打印句话,是不是这里没有客户端连接而阻塞了?
      

  2.   

    你debug一个,看看到底是走到哪里停的。
      

  3.   

    在浏览器输入http://127.0.0.1:8080/  我试了一下,有输出。不过那个请求的全部内容没读出来。inputStream的处理需要改一下。
      

  4.   

    while((c = reader.read())!=-1){ 
    builder.append((char)c);
    } 这句有问题,这个循环里面存在阻塞。reader这个输入流永远也不会结束,只有当服务器回复了客户端的请求时,这个流才有可能结束。如果你仅仅是想输出请求头的内容 改成while((c = reader.read())!=-1){ 
    System.out.pritnln((char)c);}应该就可以了。 
      

  5.   

    你的客户端程序呢、没有连接到服务器。while(true){
     Socket socket = serverSocket.accept(); 会一直在这阻塞等待,况且你那个输出想打印出数据 也必须要客户端说一句话吧
      

  6.   

    我就是通过浏览器发送的http请求,我想拿到这个http请求的内容,目前要做的就是打印出http请求的内容,这里为什么用BufferedReader这样读取,当while循环完成的时候,代码就终止了,然后stringbuilder也是空的,但是如果在while循环中加入打印StringBuilder内容的话,stringBuilder是有内容的,个人感觉是reader这点除了问题,谁能给解释一下为什么?
      

  7.   

    debug了,到while循环结束的时候,整个代码就终止了,不知道问题出在哪里···
      

  8.   


    不是这个问题,是通过浏览器发送的http请求,有客户端的连接
      

  9.   

    你看下4楼的回复吧,感觉挺有道理的,可能Http请求的,服务器必须给客户端回应了,这个输入流才会结束吧
      

  10.   


    首先这个是没问题的,reader.read()本身就是阻塞的,当然会止步与循环