首页 > 代码库 > Socket
Socket
虽然网络上的标准是七层,不过真正开发中使用的只有TCP/IP四层
- 应用层 -------------------->我们实际开发就是这一层
- 传输层 -------------------->对应这TCP和UDP两种协议
- 网络层 -------------------->网络层对应着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 MySocketService24 25 {26 27 public static void main(String[] args) throws IOException28 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 IOException62 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协议的一些信息
解析第一行字符串就可以得到客户端想访问的的资源。
当然以上只能算是模拟,因为设计到线程问题。暂时还没找到一个合理的处理方式。到以后写个加强版的模拟吧。
Socket
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。