Java网络编程知识概括

网络编程概述

在这里插入图片描述

网络通信要素概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通信要素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&amp;tpl=mn&amp;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>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <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 表示的网络资源之间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值