基本概念
一.网络:将不同区域计算机链接在一起:局域网 城域网 互联网
二.地址:IP地址,确定网络上一个绝对地址(比如一个城里边房子的地址)
三.端口号:区分计算机中安装的软件(一个房子里有许多房门) 2字节 总共63335个
1.在同一个协议下,不端口号不能重复
2.1024以下端口号不能使用,预留给重要程序 比如80端口—>http 21—>ftp
四.资源定位:URL:统一资源定位符 URI:统一资源(没有定位)
五:数据的传输:
1.协议 TCP协议 (Transmission Control Protocol):先建立连接再通信 面向连接 安全可靠 效率相对低下(类似于打电话)
UDP协议(User Datagram Protocol):先发信息 非面向连接 效率高 传输不可靠 数据可能丢失(类似于发短信)
2.传输
1).封装
2).拆封
对应JAVA中的类
1. InetAddress InetSocketAddress (地址和端口号)
2.URL
3. TCP协议:SeverSocket Socket
4. UDP协议:DatagramSocket DatagramPacket
数据传输过程中,底层还是流(IO)
具体类介绍
地址及端口
1.InetAddress类:封装 IP 及 DNS (这个类没有构造函数,不能直接创建对象,通过静态方法获取对象)
静态方法获取对象:
getLocalHost();
getByName("www.bilibili.com");
getByName("223.87.1.58");
方法:getHostAddress(); 返回ip地址
getHostName(); 返回域名/本机为计算机名
2.InetSocketAddress类: 在InetAddress的基础上加上端口
1) 创建对象 :有构造方法
InetSocketAddress(InetAddress addr, int port) 根据 IP 地址和端口号创建套接字地址。 |
InetSocketAddress(int port) 创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。 |
InetSocketAddress(String hostname, int port) 根据主机名和端口号创建套接字地址 |
2) 方法 getAddress()
返回IP地址
getHostName() 返回主机名|域名
getPort()
返回端口号
3.URL类
URL由四部分组成 :协议 主机域名|地址 端口号 文件名
1)构造方法:
URL url1=new URL("http://www.baidu.com:80/index.html#aa?uname=tomato"); //绝对路径构建
// http协议 百度服务器域名 端口号80(默认)资源名 锚点 用户
URL url2=new URL(url1,"/b.txt"); //相对路径构建 在 http://www.baidu.com:80/a/ 的基础上构建
2)方法:
System.out.println("协议:"+url1.getProtocol());//查看协议
System.out.println("域名:"+url1.getHost());//查看域名
System.out.println("端口:"+url1.getPort());//查看端口
System.out.println("资源:"+url1.getFile());//查看资源
System.out.println("相对主机路径:"+url1.getPath());//相对路径
System.out.println("锚点:"+url1.getRef());//获取锚点
System.out.println("参数:"+url1.getQuery());//?参数 问号后的参数 存在锚点返回null ,不存在返回正确
重要方法:openStream();
URL url1 = new URL("http://www.baidu.com");// 没有资源名 默认主页资源
// 获取资源流 输入到程序中
/*
* InputStream is= url1.openStream();
byte[] flush=new byte[1024]; int len=0;
* while(-1!=(len=is.read(flush))) { System.out.println(new* String(flush,0,len)); } is.close();
*/
// 有乱码 使用转换流
BufferedReader br = new BufferedReader(new InputStreamReader(url1.openStream(), "utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("baidu.html"), "utf-8"));//utf-8
//式编码
String msg = null;while ((msg = br.readLine()) != null) {
// 自动获取源码生成文件
bw.append(msg);
bw.newLine();
// 手动拷贝出来
// System.out.println(msg);
}
bw.flush();
br.close();
bw.close();
4. DatagramSocket DatagramPacket (使用UDP协议,类似于短信)
1)客户端 stp1: 创建客户端 DatagramSocket类+自己指定端口
stp2:准备数据
stp3:打包 DatagramPacket+服务器地址 端口
stp4:发送
stp5:释放资源
2)服务器端 stp1:创建服务端 DatagramSocket类+指定端口
stp2:准备接收容器 字节数组 封装 DatagramPacket
stp3:包 接收数据
stp4:分析数据
stp5:释放资源
5. Scoket通信 基于TCP协议 (类似于打电话) 面向连接 请求Request Response
1)服务器端 ServerSocket 类
2)客户端