• 我的Java之路(8)


     这章看的有点吃力,还是不太懂,以后实践中运用吧。列下知识点吧

    Java中的网络编程

    如果地址唯一标识了Internet上的计算机,则URL标识了计算机上的资源,更具体地说,URL(Uniform Resource Locator,统一资源定位器)充当一个指针,

    指向Web上 的网页、二进制文件以及其他信息对象。当手工输入如:http://www.tsinghua.edu.cn/hotlink.html的网址时,实际上就提供了该站点的主页的URL。

    一个URL通常包含了如下信息:

    1.http-超文本传输协议

    2.dlrin.edu.cn-存储资源的计算机的域名地址

    3.hotlink.html-资源

    java.net包中的URL类是对URL的抽象,使用URL创建对象的应用程序称为客户端程序。

    一个URL对象存放着一个具体的资源的引用,表明客户要访问这个URL中的资源,利用URL对象可以获取URL中的资源。一个URL对象通常包含最基本的三部分信息:协议、地址、资源。

    协议必须是URL对象所在的java虚拟机支持的协议,常用的HTTP、FTP、FILE协议都是java虚拟机支持的协议。地址必须时能连接的有效的IP地址或域名。

    资源可以使主机上的任何一个文件。

    URL的构造方法:

    public URL(String spec)  throws MalformedURLException——使用字符串初始化一个URL对象,例如:

    try{url=new URL(“http://yahoo.com.cn”);

    }

    catch(MalformedURLException e){

    System.out.println(“Bad URL”+url);   }

    该URL对象使用的协议是HTTP,即用户按照这种协议与指定的服务器通信,该URL对象包含的地址是“yahoo.com.cn”,所包含的资源是默认的资源(主页)。

    public URL(String protocol,String host,String file)  throws MalformedURLException——构造的URL对象、协议、地址和资源分别由参数protocol、host和file指定。

     读取URL中的资源

    URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端。

     JEditorPane类的构造方法:

    public JEditorPane()

    public JEditorPane(URL initialPage) throws IOException

    public JEditorPane(String url) throws IOException

    可以构造JEditorPane对象。后两个方法使用参数initialPage或url指定该对象最初显示的URL中的资源。

    JEditorPane对象调用方法:

    public void setpage(URL page)  thows IOException方法可以显示新的URL中的资源。

    有时候我们想看网页的运行效果。javax.swing包中的JEditorPane类可以解释执行html文件。

    也就是说,如果把html文件读入到JEditorPane,该文件就会被解释执行,显示在JEditorPane中,这样程序就看到了网页的运行效果。

    用户如果单击网页中的超链接,还可以使得JEditorPane对象触发HyperlinkEvent事件。程序可以通过处理HyperlinkEvent事件来显示新的URL资源

    JEditorPane对象调用addHyperlinkListener(HyperlinkListener listener)方法获得监视器。监视器需实现HyperlinkListener接口,接口中方法如下:

    void hyperlinkUpdate(HyperlinkEvent e)

    类javax.swing.event.HyperlinkEvent中的方法:

    getEventType()——获得事件类型。

    返回表示类型的HyperlinkEvent.EventType类常量:

    ACTIVATED ——激活类型。ENTERED——进入类型。

    EXITED——退出类型。

    域名容易记忆,当你在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样我们才能和主机建立连接。

    获取Internet上主机的地址

     使用InetAddress类的静态方法:

     getByName(String s);将一个域名或IP地址传递给该方法的参数s,获得一个 InetAddress对象,该对象含有主机地址的域名和IP地址,该对象用如下格式表示它包含的信息:ww.sina.com.cn/202.108.37.40。

    InetAddress类中含有两个实例方法:

    public String getHostName()——获取InetAddress对象所含的域名。

    public String getHostAddress()——获取InetAddress对象所含的IP地址。

    获取本地机的地址

    我们可以使用InetAddress类的静态方法:getLocalHost();

    获得一个InetAddress对象,该对象含有本地机的域名和IP地址。

    IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号与IP地址的组合得出一个网络套接字(Socket)。

    端口号被规定为一个16位的整数0~65535。其中,0~1023被预先定义的服务通信占用(如telnet占用端口23,http占用端口80等)。

    除非我们需要访问这些特定服务,否则,就应该使用1024~65535这些端口中的某一个进行通信,以免发生端口冲突。当两个程序需要通信时,

    它们可以通过使用Socket类建立套接字对象并连接在一起。

    当建立服务器套接字时可能发生IOException异常,因此要象下面那样建立接收客户的服务器套接字。

    try{

    ServerSocket waitSocketConnection=new   ServerSocket(1880);    }

        catch(IOException e){}

    当服务器的ServerSocket对象waitSocketConnection建立后,就可以使用方法accept()接受客户的套接字连接请求。

             接收客户的套接字也可能发生IOException异常,因此要按照下面那样建立接受客户的套接字。

    try{ 

         Socket socketAtServer= waitSocketConnection.accept();     }

        catch(IOException e){}

             所谓接收客户的套接字请求,就是accept()方法会返回一个Socket对象socketAtServer,称作服务器端的套接字对象。

    但是,accept()方法不会立刻返回,该方法会堵塞服务器端当前线程的执行,直到有客户端请求建立套接字连接。如果没有客户请求建立套接字连接,

    那么下面的  System.out.println(“ok”);这段代码总不会执行:

    try{

    Socket  socketAtServer = waitSocketConnection.accept();

          System.out.println(“ok”);

       }

    catch(IOException e){}

      注:ServerSocket对象可以调用setSoTimeout(int  timeout)方法设置超时值(单位是毫秒数), timeout是一个正值。当ServerSocket对象调用accept()方法堵塞的时间一旦超过timeout时,将触发SocketTimeoutException。

    创建Socket对象可能发生IOException异常,因此要象下面那样建立到服务器的套接字连接

    try{ 

    Socket socketAtClient=new    Socket(“192.168.0.78”,1880);      }

        catch(IOException e){}

    也可以使用Socket类不带参数的构造方法public Socket()创建一个套接字对象,该对象不请求任何连接。该对象再调用

    public void connect(SocketAddress endpoint) throws IOException

    请求和参数SocketAddress指定地址的套接字建立连接。为了使用connect()方法,可以使用SocketAddress的子类:InetSocketAddress创建一个对象。

    InetSocketAddress的构造方法是:

    public InetSocketAddress(InetAddress addr, int port)

     套接字连接中涉及到输入流和输出流操作,客户或服务器读取数据可能会引起堵塞,我们应把读取数据放在一个单独的线程中去进行。

    另外,服务器端收到一个客户的套接字后,就应该启动一个专门为该客户服务的线程。

    可以将计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户-服务器交互计算,来完成某项任务。仍然是先将服务器程序运行起来,然后等待客户端程序的运行。

    详见课本P260(java大学实用教程第二版)

  • 相关阅读:
    【灵感】wifi通过wifi发送优惠信息
    Web 通信 之 长连接、长轮询(long polling)
    深入了解 Dojo 的服务器推送技术
    浅谈TCP优化
    非IE内核浏览器支持activex插件
    树莓派安装 Nginx + PHP7.0 + Pi Dashboard
    ChartView与LineSeries搭配实现曲线局部缩放功能
    QT开发(十二)——QT事件处理机制
    QT源码之Qt信号槽机制与事件机制的联系
    详解 QT 源码之 Qt 事件机制原理
  • 原文地址:https://www.cnblogs.com/yanmingup/p/2880362.html
Copyright © 2020-2023  润新知