最近看了一下Java通信,就不可避免地用到了Socket,然后就进行了最简单访问操作,却意外发现Java程序停不下来,根本没有输出
Socket socket = new Socket("www.baidu.com", 80);
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
pw.print("GET / HTTP/1.1\r\n");
pw.print("Host: www.baidu.com\r\n");
pw.print("User-Agent: MSIE\r\n");
pw.print("Connection: close\r\n");
pw.print("\r\n");
InputStream is = socket.getInputStream();
BufferedReader bis = new BufferedReader(new InputStreamReader(is));
String line;
while((line = bis.readLine()) != null){
System.out.println(line);
}
bis.close();
is.close();
pw.close();
os.close();
socket.close();
debug了一下,发现程序卡在readLine()这一行了,网上查了一下说readLine()一定要读到 /n 才会结束,否则就会阻塞一直到读取到为止,所以换了read()方法,结果还是卡了,这就说明 BufferedReader 中根本没有数据,那么很有可能是服务端没有返回数据,所以换个网址试试,结果还是不行,最后想到了,大概是我的请求没有发出去,PrintWriter 中的数据可能卡在内存中了,所以flush()一下,成功。