黑马程序员------java学习笔记之网络编程

来源:互联网 发布:triz矛盾矩阵表 编辑:程序博客网 时间:2024/05/16 23:45

   ------- android培训、java培训、期待与您交流! ----------

一、网络编程概述

   1、网络中用IP地址标识每一台主机,ip地址用点分十进制来表示,现在用的是4个字节来表示就是IPv4,每一个字节最大255,所以每一个字节不能超过255,ip地址还有6字节表示的IPv6。ip地址中有些是保留的例如以10开头的段以及以192开头的段,其中127.0.0.1表示回路地址也就是localhost,192.168.1.255就是广播地址,192.168.1.1表示的是

   2、两台主机间通信时首先找到对方IP,再根据端口号找到通信的应用程序,这里的端口号指的是逻辑端口号,也就是网络应用程序的数字标识,比方说http服务就是80,1024以下的端口号主要是系统在使用。

   3、两台主机通讯还需要定义通信协议,国际组织使用TCP/IP协议,局域网通信可以安装微软的IPX/SPX/NetBIOS协议。局域网CS两个机子都装IPX就可以通信。有些特有的组织有自己的协议。

二、网络模型

   1、OSI参考模型,网络分层为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,通信时将从上到下数据封包接着从下到上拆包。

    2、TCP/IP参考模型,分为应用层、传输层、网际层、数据链路层、物理层,我们java中的网络编程在网际层和传输层,而javaweb开发在应用层,每个层都有自己的协议,传输层是TCP协议,网际层是IP协议,应用层有http、ftp等协议。

   3、IP地址标识网络中的设备,不易记忆使用主机名,127.0.0.1默认是localhost,javaAPI中用java.net.InetAddress类来表示IP地址,InetAddress对象用来表示ip地址对象。

      static InetAddressgetLocalHost();返回本地主机的ip地址的InetAddress对象,该方法会抛出java.net.UnkownHostException。

      String getHostAddress();返回ip地址的String对象。

      StringgetHostName();返回主机名的字符串。该方法在解析主机名时如果主机名不存在,或者无法解析返回该主机的ip地址字符串。

       InetAddressgetByName(String name)用来返回name主机的ip地址的InetAddress对像。然后再使用StringgetHostAddress()返回IP地址的String对象,本人觉得这个方法的名字有点歧义。

      InetAdress[] getAllByName(Stringname);返回主机名对应的所有ip地址的InetAddress对象,以一个数组的形式返回。

      InetAddress getByAddress(byte[]addr);给定一个装有IP地址的字节数组,返回一个InetAddress对象。

      使用的时候以IP地址为主,因为主机名还需要解析!

三、传输协议

    1、UDP面向无连接,传输数据前不用建立连接,把数据封装成数据包,是不可靠协议,容易丢包,但速度快,发的包不能超过64KB,聊天用的就是UDP比方说飞秋、视频会议、桌面共享

   2、TCP面向连接,经过3次握手建立连接,是可靠连接,在连接中传输大量数据,效率稍低,下载使用的是TCP

四、Socket

   1、Socket就是为网络服务提供的一种的机制

   2、通信的两端都有Socket

   3、网络通信其实就是Socket通信

   4、数据在两个Socket之间通过IO传输

五、UDP编程

   1、DatagramSocket类,用来建立发送和接收的数据报包的套接字,既可发送也可接收。

       voidreceive(DatagramPacket p) throwsIOException接收数据包到p中,此方法是一个阻塞式方法。

      void send(DatagramPacket )throws IOException;发送p

   2、DatagramPacket类,无连接包投递服务,根据包中的信息,从一台机器路由到其他机器,不同包投递时可有不同的路由以及按不同的顺序到达。既可用来代表接收的数据包也可表示发送的数据包。

      DatagramPacket中带着地址的都是用来构造发送数据包的。

      发送流程:1、建立udpsocket服务。

                 2、提供数据,并将数据封装到数据包中。

                3、通过socket服务的发送功能,将数据包发送出去。

                4、关闭资源。

      DatagramPacket(byte[] buf ,int length, InetAddress address, intport);构造一个DatagramPacket对象,用来发送length长度的数据包到指定的address和port。

      接收流程:1、定义udpSocket服务。

                2、定义接收数据包,存储接收到的字节数据。

                3、通过DatagramSocket的receive方法将数据存入已定义好的数据包。

                4、使用DatagramPacket的方法将数据包中的信息取出

                5、关闭资源

      DatagramPacket(byte[] buf, intlength);构造一个DataPacket对象接收length大小的数据包。

       InetAddressgetAddress();获取该数据包的IP地址的InetAddress对象。

       byte[]getData();返回数据缓冲区。

      int getPort();返回端口号

   3、实现聊天程序可以使用多线程技术

六、TCP编程

   1、UDP中是发送端和接收端而TCP中是客户端Socket和服务端ServerSocket。Socket中既有输入流也有输出流。

   2、Socket的构造函数

      Socket();创建未连接的套接字。之后可以通过connect(InetAddress addr);进行连接。

    3、Socket的方法

      OutputStream getOutputStream();返回该socket的输出流对象

      InputStream getInputStream();返回该socket的输入流对象

      Socket(InetAddress addr, int port);创建一个流套接字并将其连接到指定IP的指定端口。

   4、ServerSocket构造函数

      ServerSocket();创建非绑定服务器套接字。

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

   5、ServerSocket方法

      Socket accept();侦听并接受到此套接字的连接,返回连接的套接字对象,该方法会阻塞。

       InputStreamgetInputStream();返回此套接字的输入流

      OutputStream getOutputStream();返回此套接子的输出流

原创粉丝点击