标签:style blog http color os io 使用 java ar
虽然网络上的标准是七层,不过真正开发中使用的只有TCP/IP四层
Java底层封装了底层的实现提供了net包支持网络编程。不同进程之间的通行就是使用了端口号,同一个端口号只能被
一个进程监听。当时TCP和UDP可以同时监听一个端口而不影响。在计算机网络中。我们访问某台计算机就是采用了IP加端
号方式实现的。如我们常用的浏览器输入网址时候。如www.baidu.com中www是协议名字 baidu.com是DNS中注册的地址。
通过DNS就可以反查询到IP地址。其实后面baidu.com后面省略了www中默认的端口号80.
URL提供了网络定位。URL里面有个openConnection可以访问URL对象描述的地址。
Socket/ServerSocket提供可TCP编程的访问Socket和服务器ServerSocket. ServerSocket对象通过监听某个端口号码.当
访问指定端口号码时候会创建一个socket对象。Socket对象之间的通信采用IO流的操作。
这里写一段代码模拟下用浏览器访问网站时候的过程
1 import java.io.BufferedReader; 2 3 import java.io.IOException; 4 5 import java.io.InputStream; 6 7 import java.io.InputStreamReader; 8 9 import java.io.OutputStream; 10 11 import java.io.PrintWriter; 12 13 import java.io.Reader; 14 15 import java.net.ServerSocket; 16 17 import java.net.Socket; 18 19 20 21 22 23 public class MySocketService 24 25 { 26 27 public static void main(String[] args) throws IOException 28 29 { 30 31 ServerSocket ss=new ServerSocket(8080); 32 33 Socket socket=ss.accept(); 34 35 InputStream is=socket.getInputStream(); 36 37 String str=printfInputStreamString(socket.getInputStream()); 38 39 OutputStream os=socket.getOutputStream(); 40 41 PrintWriter pw=new PrintWriter(os); 42 43 System.out.println(str); 44 45 pw.write(str); 46 47 pw.close(); 48 49 is.close(); 50 51 socket.close(); 52 53 ss.close(); 54 55 56 57 } 58 59 public static String printfInputStreamString(InputStream is) 60 61 throws IOException 62 63 { 64 65 StringBuilder sb=new StringBuilder(); 66 67 Reader reader=new InputStreamReader(is); 68 69 BufferedReader br=new BufferedReader(reader); 70 71 String str=null; 72 73 while((str=br.readLine())!=null&& !str.equals("")) 74 75 { 76 77 sb.append(str); 78 79 sb.append("\n"); 80 81 } 82 83 sb.trimToSize(); 84 85 return sb.toString(); 86 87 } 88 89 }
当用浏览器访问http://localhost:8080/的时候就会打印出Http协议的一些信息
解析第一行字符串就可以得到客户端想访问的的资源。
当然以上只能算是模拟,因为设计到线程问题。暂时还没找到一个合理的处理方式。到以后写个加强版的模拟吧。
标签:style blog http color os io 使用 java ar
原文地址:http://www.cnblogs.com/wkdremo/p/3956988.html