我的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大学实用教程第二版)

原文地址:https://www.cnblogs.com/yanmingup/p/2880362.html