Java------- 网络编程

本文深入讲解了Java网络编程的核心概念,包括IP地址、端口号、URL、URI、TCP/IP与UDP协议的区别,以及OSI七层模型。同时,介绍了客户端与服务器的工作模式,传输层的传输方式,以及Java网络编程API如ServerSocket、Socket、DatagramSocket等的使用。
摘要由CSDN通过智能技术生成


   java 网络编程

网络:使用光纤,网线,Wifi等传输介质,将位于不同的地址的计算机连接到一起   1、局域网  2、广域网(互联网)3、城域网

地址:计算机在网络上,什么东西是它的地址? IP地址, IP地址就是计算机在网络上的唯一绝对地址 ,相当于人居住的房子的地址.

计算机上面可以安装非常多的应用软件,那么如何区分这些软件?需要通过端口号来区分,端口号,相当与房子中开的们.

一、端口号在计算机里面有2个字节那么大,因此端口号的取值范围:0--65535  共65536个 但是1024以下的端口号,通常是计算机内置软件端口 类似于现实生活中的短号号码 120
110 119 ...

二、1024以上的我们都可以用,并且为了避免重复性,推荐大家端口号定义越大越好.

三、多个软件之间,如果使用同一种通讯协议,那么软件之间,端口号不允许重复.  但是不同协议,端口可以重复.

四、资源定位 URL:统一资源定位符 http://127.0.0.1:80/stusystem/user/1   URI:统一资源修饰符.  user/1

五、数据的传输

   1、计算机之间底层通过传输010101010100110010010这样的数据进行通讯,但是通讯时,如果识别有效数据,还是需要不同的协议才能完成,不然就会造成:鸡同鸭将的效果.
   协议中,场景的底层协议:TCP/UDP
   TCP/IP:非常类似于打电话,它是一种面向连接的协议. 他的特点:安全可靠但是效率相对UDP而言,较为低下    ---请求响应模式
   UDP:类似于发短信,类似于广播,它是一种非面向连接的协议. 他的特点:不可靠,安全性较低, 但是它的效率较高.

   2、数据在进行传输时,需要经过一系列的封装和拆分的过程.
     1)、数据的封装.
     2)、数据的拆分.
     采用了分层的思想,来完成对层次的解耦,以及各层的职责分离,让各层能够合理分工合作.   --OSI七层模型.

六、 客户端和服务器
    C/S  Client/Server  (胖客户端) 特点:需要安装 需要更新.
    B/S  Browser/Server (瘦客户端) 特点:不需要安装,更不需要更新,服务器更新之后,打开浏览器,自动更新.

七、传输层的传输方式
    需要解决到达计算机的OSI七层模型中的010101010100100这种二进制数据,如何才能到达我们的应用软件.
    传输层的作用:就是建立一个数据传输通道,将来自于OSI七层模式中下三层的数据传输到我们应用程序中.
    这个数据传输通道,我们把它称之为Socket接字,实际上,就类似于我们现实生活中的飞机场、食品厂、物流中的"传输履带",只不过他的特点是:可以双向传输.
    作为传输层来讲,只有2种传输协议,TCP/IP(三次握手四次挥手),UDP.
    TCP/IP:建立连接三次握手-----关闭连接四次挥手.

java.net:
ServerSocket   Socket    DatagramSocket  DatagramPacket  InetAddress  URL  URLConnection(HttpURLConnection)  URLEncoder   URLDecoder  

    getByName(String host):根据主机获取对应的InetAddress对象。该方法是静态方法。

    getByAddress(byte[] address):根据原始IP地址获取对应的InetAddress对象。该方法是静态方法。

    String getCanonicalHostName():获取此IP地址的全限定域名。

    String getHostAddress():返回此IP地址对应的IP地址字符串。

    String getHostName():返回此IP地址对应的主机名。

    String getLocalHost():获取本地IP地址对应的InetAddress对象。

           //获取本机的InetAddress对象
            InetAddress addr = InetAddress.getLocalHost();
            //获取本机的IP地址
            System.out.println(addr.getHostAddress());        
            //获取本机的主机名
            System.out.println(addr.getHostName());    
            
            //-------------------------------------
            // 获得其他机器的InetAddress对象(根据IP地址)
            //-------------------------------------
            addr = InetAddress.getByName("192.168.1.122");
            //获取机器的IP地址
            System.out.println(addr.getHostAddress());        
            //获取机器的主机名
            System.out.println(addr.getHostName());    //此时输出的IP地址,不是域名,也不是计算机的名称,
            //如果我在getByName()这个方法中,输入的IP地址不存在或者是机器本身的DNS不允许进行IP地址与域名|(IP地址与机                器名) 之间的映射,
            //那么.getHostName()这个方法直接返回的IP地址
            
            
            //-------------------------------------
            // 获得其他机器的InetAddress对象(根据域名)
            //-------------------------------------
            addr = InetAddress.getByName("www.baidu.com");
            //获取机器的IP地址
            System.out.println(addr.getHostAddress());        
            //获取机器的主机名
            System.out.println(addr.getHostName());    //此时返回的就是域名 机器本身的DNS允许进行IP地址与域名
            
            
            //-------------------------------------
            // 获得其他机器的InetAddress对象(根据主机名)
            //-------------------------------------
            addr = InetAddress.getByName("IXEZUAQCXJ8BTAO");
            //获取机器的IP地址
            System.out.println(addr.getHostAddress());        
            //获取机器的主机名
            System.out.println(addr.getHostName());    


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值