JAVA 网络编程

本文介绍了网络通信的基本概念,包括网络类型、IP地址与端口号的作用,以及URL和URI的区别。此外,还详细讲解了TCP和UDP两种主要的数据传输协议的特点,并通过Java类库中的实例展示了如何实现网络通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

一.网络:将不同区域计算机链接在一起:局域网 城域网 互联网

二.地址: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)客户端

     





          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值