码迷,mamicode.com
首页 > 其他好文 > 详细

Socket

时间:2014-09-04 23:30:10      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   使用   java   ar   

    虽然网络上的标准是七层,不过真正开发中使用的只有TCP/IP四层

  1. 应用层 -------------------->我们实际开发就是这一层
  2. 传输层     -------------------->对应这TCP和UDP两种协议
  3. 网络层     -------------------->网络层对应着IP
  4. 数据链路层 -------------------->

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协议的一些信息

bubuko.com,布布扣

解析第一行字符串就可以得到客户端想访问的的资源。

当然以上只能算是模拟,因为设计到线程问题。暂时还没找到一个合理的处理方式。到以后写个加强版的模拟吧。

Socket

标签:style   blog   http   color   os   io   使用   java   ar   

原文地址:http://www.cnblogs.com/wkdremo/p/3956988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!