繁体   English   中英

我构建了一个简单的http服务器,当响应数据包含“ * http”时,*可以是少于5个字符的任何字符串,浏览器什么也没收到

[英]i constructed a simple http server, when response data contains “*http”, * can be any strings short than 5 characters,the browser received nothing

我构建了一个简单的http服务器,当响应数据包含“ * http”时,*可以是少于5个字符的任何字符串,客户端浏览器什么也没收到。 但是,当响应数据中包含由多个5个字符以上的字符串包围的“ http”时,客户端可以获取它

服务器代码,在指定端口监听

 public class HttpServer { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(8888); while (true) { Socket socket = server.accept(); // System.out.println("客户端IP地址:"+socket.getInetAddress()); HttpSession session = new HttpSession(socket); new Thread(session).start(); } } catch (IOException e) { e.printStackTrace(); } } } 

处理请求

 public class HttpSession implements Runnable { private Socket socket ; public HttpSession(Socket socket){ super(); this.socket = socket; } public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); OutputStream out = this.socket.getOutputStream(); String command = null; while((command = br.readLine()) != null){ // System.out.println("浏览器的指令:"+command); if(command.length() <3){ break; } String result = command.substring(0,3); if(result.equalsIgnoreCase("GET")){ int begin = command.indexOf("/")+1; int end=command.lastIndexOf(" "); String parameters = command.substring(begin,end); System.out.println(parameters); parameters = URLDecoder.decode(parameters, "utf-8"); System.out.println("key"+parameters); if(!parameters.contains(".")) doGet(parameters,out); break; } } out.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } private void doGet(String key, OutputStream out) { System.out.println(key+"-------"); List<String> list=WillDelete.getImages(key); String data="<html>"; for(String t:list){ data+="<img src='"+t+"'/>"; } data+="</html>";// response with this, the client can receive data // data="<imghttp</2>";//response with this, the client can receive noting try { out.write(data.getBytes("UTF-8")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

我用不同的字符串多次测试了该程序,但找不到答案。 突然我认为这是一个HTTP请求,应该返回一个HTTP响应。 然后我查找有关http的信息。 我发现http由四个部分组成:

<状态线>

<标题>

<空白>

[<响应体>]

下面是一个示例:HTTP / 1.1 200 OK日期:2005年12月31日,星期六23:59:59 GMT内容类型:text / html; charset = ISO-8859-1内容长度:122

<html>

<头>

<标题> Wrox主页</ title>

</头>

<身体>

<!-身体在这里-> </ body>

</ html>

因此,浏览器必须将其视为http响应标头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM