TTP请求消息发送到服务器。下面是这个方法的实现代码:
001 private void sendHttpRequest() throws Exception
002 {
003 socket = new Socket();
004 socket.setSoTimeout(10 * 1000);
005 System.out.println("正在连接服务器");
006 socket.connect(new InetSocketAddress(host, port), 10 * 1000);
007 System.out.println("服务器连接成功!");
008 OutputStream out = socket.getOutputStream();
009 OutputStreamWriter writer = new OutputStreamWriter(out);
010 writer.write(request);
011 writer.flush();
012 }
第004行:设置读取数据超时为10秒。
第006行:连接服务器,并设置连接超时为10秒。
五、readHttpResponse(...)方法的实现
这个方法的主要功能是从服务器读取返回的响应消息。首先读取了响应消息头,然后要求用户输入Y或N以确定是否显示响应消息的实体内容。这个程序之所以这样做,主要有两个原因:
(1) 为了研究HTTP协议。
(2) 由于本程序是以字符串形式显示响应消息的,因此,如果用户请求了一个二进制Web资源,如一个rar文件,那么实体内容将会显示乱码。所以在显示完响应消息头后由用户决定是否显示实体内容。
这个方法的实现代码如下:
001 private void readHttpResponse(BufferedReader consoleReader)
002 {
003 String s = "";
004 try
005 {
006 InputStream in = socket.getInputStream();
007 InputStreamReader inReader = new InputStreamReader(in);
008 BufferedReader socketReader = new BufferedReader(inReader);
009 System.out.println("---------HTTP头---------");
010 boolean b = true; // true: 未读取消息头 false: 已经读取消息头
011 while ((s = socketReader.readLine()) != null)
012 {
013 if (s.equals("") && b == true && !isHead)
014 {
015 System.out.println("------------------------");
016 b = false;
017 System.out.print("是否显示HTTP的内容(Y/N):");
018 String choice = consoleReader.readLine();
019 if (choice.equals("Y") || choice.equals("y"))
020 {
021 System.out.println("---------HTTP内容---------");
022 continue;
023 }
024 else
025 break;
026 }
027 else
028 System.out.println(s);
029 }
030 }
031 catch (Exception e)
032 {
033 System.out.println("err:" + e.
|