Java网络编程知识概括
- 网络编程概述
- 网络通信要素概述
- 通信要素1:IP和端口号
- 通信要素1:网络协议
- TCP三次握手,四次挥手
- 套接字Socket
- TCP网络编程
- UDP网络编程
- URL编程
- 总结
网络编程概述
网络通信要素概述
通信要素1:IP和端口号
通信要素1:网络协议
TCP三次握手,四次挥手
套接字Socket
TCP网络编程
UDP网络编程
URL编程
URL类简述:
- URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一 资源的地址。
- 它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate 这个资源。
- 通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp 站点。浏览器通过解析给定的 URL可以在网络上查找相应的文件或其他资源。
- URL的基本结构由5部分组成:
① <传输协议>://<主机名>:<端口号>/<文件名>#片段名?参数列表
②例如:
http://192.168.1.100:8080/helloworld/index.jsp#a?username=shkstart&password=123③#片段名:即锚点,例如看小说,直接定位到章节
④参数列表格式:参数名=参数值&参数名=参数值… - 一个URL对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:
①public String getProtocol( ) 获取该URL的协议名
②public String getPort( ) 获取该URL的端口号
③public String getPath( ) 获取该URL的文件路径
④public String getFile( ) 获取该URL的文件名
⑤public String getQuery( ) 获取该URL的查询名
URL传输协议:
- http:超文本传输协议,访问的是远程网络资源,网络开发中最常用的协议,格式:http://
- https:相当于 http 协议的安全版
- file:访问的是本地计算机上的资源,格式:file://
- mailto:电子邮箱地址,格式:mailto:
- ftp:访问的是共享主机的文件资源,格式:ftp://
file协议:
- 本地文件传输协议 ,File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。
- 基本的格式如下:file:///文件路径,比如要打开F盘flash文件夹中的1.swf文件,那么可以在资源管理器或浏览器地址栏中输入:file:///f:/flash/1.swf回车。
- url中为什么本地文件file后面跟三个斜杠, http等协议跟两个斜杠?
①因为URL结构是:
<传输协议>://<主机名>:<端口号>/<文件名>#片段名?参数列表
②如果有host,前面是要加 // 的,因此对于 http 等这些网络地址来讲http://www.baidu.sb:80/ad/cas写成这样很自然。
③如果是文件,文件没有 host ,所以中间的部分就不要了,就变成了file:///ad/cash
④你要是连公司内网就知道了,其他服务器的文件地址是 file://host/path/file.ext
本机不用 host 部分,就直接 file:/// 即可。
使用URL创建连接:
- 使用openConnection方法来创建连接, 创建连接之后对这个URL代表的资源做相关操作
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.baidu.com");
URLConnection conn = url.openConnection();
conn.connect();
}
- 在建立连接之前,可以设置请求连接的值。
如何读取URL代表的资源:
- 创建一个URL对象
通过URL对象的openConnection方法拿到URLConnection
- 通过设置URLConnection对象的属性来设置连接请求的参数
使用URLConnection类中的connect方法创建连接
使用连接创建一个输入流
从输入流中读取数据
- 关闭输入流
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.baidu.com");
URLConnection conn = url.openConnection();
conn.connect();
try (Scanner scanner = new Scanner(new InputStreamReader(conn.getInputStream()))) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
}
- 运行结果如下:
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
- 也可以直接使用URL类中的openStream方法,省去创建连接的代码
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.baidu.com");
try (Scanner scanner = new Scanner(new InputStreamReader(url.openStream()))) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
}
- 实际上URL类中的openStream方法中会帮我们创建连接
public final InputStream openStream() throws java.io.IOException {
return openConnection().getInputStream();
}
针对HTTP协议的URLConnection类总结:
- URL的方法 openStream():能从网络上读取数据
- 若希望输出数据,例如向服务器端的 CGI (公共网关接口-Common Gateway Interface-的简称,是用户浏览器和服务器端的应用程序进行连接的接口)程序发送一些数据,则必须先与URL建立连接,然后才能对其进行读写,此时需要使用 URLConnection 。
- URLConnection:表示到URL所引用的远程对象的连接。当与一个URL建立连接时, 首先要在一个 URL 对象上通过方法openConnection() 生成对应的 URLConnection 对象。如果连接过程失败,将产生IOException.
URI、URL和URN的区别:
- URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个 资源。
- 而URL是uniform resource locator,统一资源定位符,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
- 而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。
- 也就是说,URI是以一种抽象的,高层 次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。
- URL 和URN都是一种URI。 在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则 不仅符合语义,还包含了定位该资源的信息, 因此它不能是相对的。
- HTTP 协议中 URI 和 URL 有什么区别
总结
简述:
- 位于网络中的计算机具有唯一的IP地址,这样不同的主机可以互相区分。
- 客户端-服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实 现面向连接的会话。
- Java 中有关网络方面的功能都定义在 java.net 程序包中。Java 用 InetAddress 对象表示 IP 地址,该对象里有两个字段:主机名(String) 和 IP 地址(int)。
- 类 Socket 和 ServerSocket 实现了基于TCP协议的客户端-服务器程序。Socket是客户端和服务器之间的一个连接,连接创建的细节被隐藏了。这个连接提供了一个安全的数据传输 通道,这是因为 TCP协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络 拥挤等问题,它保证数据可靠的传送。
- 类 URL 和 URLConnection 提供了最高级网络应用。URL 的网络资源的位置来同一表示 Internet上各种网络资源。通过URL对象可以创建当前应用程序和 URL 表示的网络资源之间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。