URL
URL(universal Resource Locator)用于:定位一个软件之间的某个资源
url的组成包含:
- 协议:
- 存放资源的主机域名
- 端口名;默认80
- 资源文件名
URI可以分为URL和URN
URL:包含资源,也包含了资源访问的方式
URN:没有包含访问资源的方式。
例如:
https://www.baidu.com:80/index.html?uname=lsy&age=18#a
- https:安全协议,一般都会加s。
- www.baidu.com:域名
- 80:端口名
- uname=shsxt&age=18:参数
- #a:锚点。
锚点(#)是在同一个页面或者同一个网站之间的跳转
超链接:可以在同一个网站或者不同的网站之间进行跳转
用到的类是:URL类
public class TestURL {
public static void main(String[] args) throws MalformedURLException {
URL url=new URL("https://www.baidu.com:80/index.html?uname=lsy&age=18#a");
//获取四个值:用的是正则表达式,不会去判断这个url是否存在。
System.out.println("协议:"+url.getProtocol());
System.out.println("域名:"+url.getHost());
System.out.println("端口"+url.getPort());
System.out.println("请求资源1"+url.getFile());//具体的请求资源文件
System.out.println("请求资源2"+url.getPath());//uri,不带参数和锚点
//参数
System.out.println("参数"+url.getQuery());
//锚点
System.out.println("锚点:"+url.getRef());
}
}
IP
IP:作用是定位一个节点:计算机,路由,通讯
用到的是 InetAddress类:获得ip地址,以及一些相关的信息。
主要静态方法:
- 1.getLocalHost():获得本机的ip地址
- 2.getByName(“www.shsxt.com”):根据域名解析ip地址
两个成员方法:
- 1.getHostAddress()返回本机的ip地址
- 2.getHostName()本机的名称
public class TestIP {
public static void main(String[] args) throws UnknownHostException {
// TODO Auto-generated method stub
//InetAddress.getLocalHost()方法创建InetAddress对象。
InetAddress addr=InetAddress.getLocalHost();
System.out.println(addr.getHostAddress());//返回本机的ip地址192.168.145.1
System.out.println(addr.getHostName());//输出计算机的名称LAPTOP-OG1N7VQG
//根据域名得到InetAddress对象,IP
addr=InetAddress.getByName("www.shsxt.com");
System.out.println(addr.getHostAddress());
System.out.println(addr.getHostName());
}
}
端口
端口是区分不同的软件,
- 用2个字节表示, 在同一个协议中不能出现端口名冲突,不用的协议中可以出现相同的端口名。
tcp:0-65535
udp:0-65535
一些常见服务器的端口:
tomcat服务器的端口:8080
Oracle:1521
MySQL:3306
我们在定义端口号的时候尽量定义大一点的端口号,避免冲突
查询操作::在命令行查询本机信息
- 查看所有的端口:netstat -ano
- 查看指定的端口:netstat -ano|findstr “808”:可以得到具体的进程
- 查看指定进程:tasklist|findstr “1564”:可以看到具体的程序
- 查看具体的进程:使用任务管理器查看pid。
用到的是InetSocketAddress类
构造方法:
- InetSocketAddress(域名或者是ip地址,端口名);
常用的方法: - getHostName()
- getAddress()
- getPort()
public class TestPort {
public static void main(String[] args) {
// TODO Auto-generated method stub
//放入ip地址,或者是域名
InetSocketAddress socketAddress1=new InetSocketAddress("127.0.0.1",8080);
InetSocketAddress socketAddress2=new InetSocketAddress("localhost",9000);
System.out.println(socketAddress1.getHostName());
System.out.println(socketAddress2.getAddress());
System.out.println(socketAddress2.getPort());
}
}
传输层的协议TCP,IP传输层的协议:
- TCP:面向连接的可靠的基于字节流的运输层(三次握手)
- UDP:一种无连接的传输协议,面向事物的简单的不可靠的传输服务,可能会丢失数据
应用层的协议: - 套接字:Socket,套接字就像是传输层为应用层开了一个小口,应用程序通过这个小口向远程发送数据,或者接受远程发来的数据, 而这个小口以内,也就是数据进入这个小口之后,或者数据从这个小口出来之前,是不知道也不需要知道的,也不会关心 他是如何传输的,这属于网络其他层次的工作。
基于TCP协议的Socket编程:
- 通讯双方需要建立连接,并且连接的建立时双方存在主次之分
基于UDp协议的Socket编程:
- 通讯双方不需要建立连接,通讯双方完全平等(连天软件)