学习Java第十九天(二):1、Java中的网络编程

目录

1、Java网络编程之InetAddress类

2、URL与URI的区别

3、Java中的URL类(访问网络资源)

4、基于TCP协议的通信协议


1、Java网络编程----InetAddress类

  1. InetAddress类的使用

    java.net 包类InetAddress 此类表示互联网协议(IP)地址。

    public class InetAddress implements java.net.Serializable

    InetAddress类的构造方法

    缺省修饰符 InetAddress(){}

    我们在自己的Java程序中是不能通过new+构造方法的方式创建出InetAddress类对象。

    我们就需要使用下面这两个静态方法来得到InetAddress类对象。

    static InetAddress getLocalHost()返回包含有本机IP地址的InetAddress对象。

    static InetAddress getByName(String host)根据域名得到包含有该域名对应Ip地址的InetAddress对象。

    实例方法

    String getHostAddress()返回IP地址字符串

    String getHostName()获得此IP地址的主机名

    public class InetAddressTest {
        public static void main(String[] args) throws Exception {
            //得到本机的ip地址和计算机名
            //得到包含有本机ip地址和InetAddress对象
            InetAddress localHost = InetAddress.getLocalHost();
            //得到本机ip地址
            String hostAddress = localHost.getHostAddress();
            System.out.println(hostAddress);
            //得到本机的计算机名
            String hostName = localHost.getHostName();
            System.out.println(hostName);
            //得到百度的ip地址和计算机名
            String host1 = "www.baidu.com";//不安全
            String host = "baidu.com";
            InetAddress baidu = InetAddress.getByName(host);
            String hostAddress1 = baidu.getHostAddress();
            System.out.println(hostAddress1);
            
            String hostName1 = baidu.getHostName();
            System.out.println(hostName1);
        }
    }

2、URL与URI的区别

  1. URL与URI的区别

    URI,统一支援标识符(Uniform Resorce Identifier,URI),表示的是web上每一种可用的资源,如HTML文档,图像,视频片段,程序等都由一个URI进行标识的。

    URI通常由三部分组成

    1. 资源的命名机制;

    2. 存放资源的主机名;

    3. 资源自身的名称;

    URL是URI的一个子集。它是(Uniform Resource Locator)的缩写,译为“统一资源定位符”。采用URL可以用一种统一的格式来描述各种信息资源,包括文件,服务器的地址和目录等。URL是URI概念的一种实现方式。

    URL的格式有三部分组成:

    1. 第一部分是协议(或称为服务方式)用“://”符号隔开

    2. 第二部分是存有该资源的主机IP地址(有时也包括端口号)。用“/”符号隔开

    3. 第三部分是主机资源的具体地址,如目录和文件名等。用“/”符号隔开

    例如:https://www.baidu.com/index.html---资源访问地址

    从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位改资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

3、Java网络编程----URL类(访问网络资源)

  1. URL类的构造方法

    URL(String spec)从String表示形成一个URL对象。

    URL(String protocol,String host,int port,String file)创建URL从指定对象protocol,host,port和file。

    实例方法

    URLConnection openConnection()返回一个URLConnection实例,表示与URL引用的远程对象的URL。

    InputStream openStream()打开与此URL,并返回一个InputStream,以便从该连接读取。

    public class URLTest {
        public static void main(String[] args) throws Exception {
            File file = new File("E:" + File.separator + "20220202" + File.separator + "test.jpg");
            String path = "https://img-home.csdnimg.cn/images/20221207093454.jpg";
            URL url = new URL(path);
            //创建输入流
            InputStream is = url.openStream();
            //创建输出流
            FileOutputStream fileOutputStream = new FileOutputStream(file, true);
            //保存读取来的具体数据的字节数组
            byte[] bytes = new byte[1024];
            int temp = 0;
            //读取数据
            while ((temp = is.read(bytes)) != -1) {
                fileOutputStream.write(bytes, 0, temp);
            }
            fileOutputStream.close();
            is.close();
        }
    }

4、基于TCP协议的通信协议

  1. 什么是TCP协议?

    TCP---传输控制协议(有连接的协议)

    优点:保证数据安全可靠

    缺点:消耗大,效率低

  2. TCP协议三次握手

    TCP协议在通信的时候,要求通信的双方先建立连接(面向有连接的协议)。在建立连接的过程中需要经过三次握手才能完成连接的建立。

    1. 第一次握手:Client将标志位置SYN为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。【Client给Server发送创建连接的请求】

    2. 第二次握手:Server收到数据包后有标志位SYN=1直到Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。【Server被Client发送响应信息】

    3. 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入established状态,完成三次握手,随后Client与Server之间可以开始传输数据了。【Client给Server发送确认信息】

  3. 建立基于TCP的网络通讯程序需要使用的类和常用方法

    上面建立基于TCP的网络通讯程序需要两套程序。

    第一套程序,是建立客户端程序

    java.net.Socket[套接字]创建基于TCP的通讯程序的客户端对象的java类

    构造方法

    Socket(InetAddress address,int port)创建流套接字并将其连接到指定IP地址的指定端口号。

    Socket(String host,int port)创建流套接字并将其连接到指定主机上的指定端口号。

    实例方法

    OutputStream getOutputStream()返回客户端的输出流。【与服务器的输入流连接】

    InputStream getInputStream()返回客户端的输入流。【与服务器的输出流连接】

    void close()关闭客户端。

    第二套程序,是链接服务器端程序

    java.net.ServerSocket 创建基于TCP的通讯程序的服务器端对象的java类

    构造方法

    ServerSocket(int port)创建绑定到指定端口的服务器套接字

    实例方法

    Socket accept()监听要连接此套接字并接收它。【阻塞主线程运行】

    void close()关闭服务器。

    客户端程序的开发步骤:

    1. 创建客户端对象(Socket),连接服务器

    2. 通过客户端对象(Socket)的getInputSteam()/getOutputStream,得到输入输出流

    3. 通过得到的输入输出流对象调用read()/write()方法完成数据收发。

    4. 关闭输入输出流和客户端对象(Socket)。

    服务器端程序的开发步骤:

    1. 创建服务器对象(ServerSocket),开启服务器。

    2. 通过服务器端对象(ServerSocket)的accept()方法,获得连接进入服务器的客户端对象(Socket)。

    3. 连接进入服务器的客户端对象(Socket)的getInputStream()/getOutputStream,到输入输出流。

    4. 通过得到的输入输出流对象调用read()/write()方法完成数据收发。

    5. 关闭输入输出流和客户端对象(Socket)以及服务器端对象(ServerSocket)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网农民工001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值