Java基础学习12--Java 网络编程 API

傷城~ 2023-09-30 10:24 66阅读 0赞

目录

一、Java 网络工具类

1、InetAddress 类

2、URL 类

二、Socket 编程


一、Java 网络工具类

1、InetAddress 类

在 TCP/IP 协议族中,是通过 IP 地址来标识网络上的一台主机的。假设需要在程序中获取本机的 IP 地址,该如何编写代码呢?通过查阅 JDK API 文档获悉,在 Java 中,使用 java.net 包下的 InetAddress 类表示互联网协议的 IP 地址。下面的案例演示了如何获得本地主机的 IP 地址

  1. import java.net.*;
  2. public class TestGetIP {
  3. public static void main(String args[]) {
  4. InetAddress myIP = null;
  5. try {
  6. //通过InetAddress类的静态方法,返回本地主机对象
  7. myIP = InetAddress.getLocalHost();
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }
  11. //通过InetAddress类的getHostAddress()方法获得IP地址字符串
  12. System.out.println(myIP.getHostAddress());
  13. }
  14. }

如果不仅想获得本地主机的 IP 地址,还想根据用户输入的域名,获取这个域名在互联网上的 IP 地址:

  1. import java.util.Scanner;
  2. import java.net.*;
  3. public class TestGetIP2 {
  4. public static void main(String args[]) {
  5. InetAddress sohuIP = null;
  6. Scanner input = new Scanner(System.in);
  7. System.out.print("请输入要查询IP地址的域名:");
  8. String dName = input.next();
  9. try {
  10. //通过InetAddress类的静态方法,返回指定域名的IP地址对象
  11. sohuIP = InetAddress.getByName(dName);
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. System.out.println("域名:" + dName + " 对应的IP地址为:" + sohuIP.getHostAddress());
  16. }
  17. }

通过 InetAddress 类的静态方法获取 InetAddress 对象的方法 :

  • InetAddress[] getAllByName(String host):在给定主机名的情况下,根据系统上配置的名称服务 host 返回其 IP 地址所组成的数组。
  • InetAddress getByAddress(byte[] addr):给定字节数组形式的 IP 地址,返回 InetAddress 对象。
  • InetAddress getByAddress(String host, byte[] addr):根据提供的主机名 host 和字节数组形式的 IP 地址 addr,创建 InetAddress 对象。
  • InetAddress getByName(String host):给定主机名 host,返回 InetAddress 对象。
  • InetAddress getLocalHost():返回本地主机 InetAddress 对象。

InetAddress 类的其他常用方法有以下几种:

  • byte[] getAddress():返回此 InetAddress 对象的原始 IP 地址。
  • String getCanonicalHostName():返回此 IP 地址的完全限定域名。完全限定域名是指主机名加上全路径,全路径中列出了序列中所有域成员。
  • String getHostAddress():返回 IP 地址字符串。
  • String getHostName():返回此 IP 地址的主机名。

2、URL 类

URL 类代表一个统一资源定位符,它是指向互联网资源的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

下面这个案例的具体需求为先输入要定位的 URL 地址,然后再输入要显示哪个页面标签元素的内容,程序显示该标签的具体内容

  1. import java.util.Scanner;
  2. import java.net.*;
  3. import java.io.*;
  4. public class TestURL {
  5. public static void main(String args[]) {
  6. URL tURL = null;
  7. BufferedReader in = null;
  8. Scanner input = new Scanner(System.in);
  9. System.out.print("请输入要定位的URL地址:");
  10. String url = input.next();
  11. System.out.print("请输入要显示哪个页面标签元素的内容:");
  12. String iStr = input.next();
  13. try {
  14. //通过URL字符串创建URL对象
  15. tURL = new URL(url);
  16. in = new BufferedReader(new InputStreamReader(tURL.openStream()));
  17. String s;
  18. while ((s = in.readLine()) != null) {
  19. if (s.contains(iStr))
  20. System.out.println(s);
  21. }
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }

URLConnection 类

前面介绍的 URL 类代表的是一个网络资源的位置,而接下来要介绍的 URLConnection 代表的是一种连接。此类的实例可用于读取和写入对应 URL 引用的资源。通常,创建一个到 URL 的连接 URLConnection 的对象需要以下几个步骤:

  1. 通过在 URL 上调用 openConnection() 方法创建连接对象。
  2. 设置参数和一般请求属性。
  3. 使用 connect() 方法建立到远程对象的实际连接。
  4. 远程对象变为可用,其中远程对象的头字段和内容变为可访问。

以下,列出一些 URLConnection 类的属性及其含义。

  • boolean doInput :将 doInput 标志设置为 true,指示应用程序要从 URL 连接读取数据,此属性的默认值为 true。此属性由 setDoInput() 方法设置,其值由 getDoInput() 方法返回。
  • boolean doOutput :将 doOutput 标志设置为 true,指示应用程序要将数据写入 URL 连接,此属性的默认值为 false。此属性由 setDoOutput() 方法设置,其值由 getDoOutput() 方法返回。
  • boolean useCaches :如果其值为 true,则只要有条件就允许协议使用缓存;如果其值为 false,则该协议始终必须获得此对象的新副本,其默认值为上一次调用 setDefaultUseCaches() 方法时给定的值。此属性由 setUseCaches() 方法设置,其值由 getUseCaches() 方法返回。

下面通过程序清单 TestURLConnection.java 中的案例,简要说明 URLConnection 类的使用

  1. import java.net.*;
  2. import java.io.*;
  3. public class TestURLConnection {
  4. public static void main(String args[]) {
  5. try {
  6. //(1)通过在URL上调用openConnection()方法创建连接对象
  7. URL url = new URL("https://06b6a8566c13-service.simplelab.cn/examples/index.html");
  8. //根据URL获取URLConnection对象
  9. URLConnection urlC = url.openConnection();
  10. //请求协议是HTTP协议,故可转换为HttpURLConnection对象
  11. HttpURLConnection hUrlC = (HttpURLConnection) urlC;
  12. //(2)设置参数和一般请求属性
  13. //请求方法如果是POST,参数要放在请求体里,所以要向hUrlC输出参数
  14. hUrlC.setDoOutput(true);
  15. //设置是否从httpUrlConnection读入,默认情况下是true
  16. hUrlC.setDoInput(true);
  17. //请求方法如果是POST,不能使用缓存
  18. hUrlC.setUseCaches(false);
  19. //设置Content-Type属性
  20. hUrlC.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
  21. //设定请求的方法为POST,默认是GET
  22. hUrlC.setRequestMethod("POST");
  23. //(3)使用connect方法建立到远程对象的实际连接
  24. hUrlC.connect();
  25. //(4)远程对象变为可用
  26. //通过HttpURLConnection获取输出输入流,可根据需求进一步操作
  27. OutputStream outStrm = hUrlC.getOutputStream();
  28. InputStream inStrm = hUrlC.getInputStream();
  29. //省略若干代码
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }

二、Socket 编程

Socket 通常也称为套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。Java 语言中的 Socket 编程常用到 SocketServerSocket 这两个类, Socket 用于端对端的通信,而 ServerSocket 常用于服务端对象的创建,它们都位于 java.net 包中。

Socket 编程可以基于 TCP 编程,也可基于 UDP 编程,其中 TCP 方式主要是通过 SocketServerSocket 类实现,而 UDP 方式主要通过 DatagramSocketDatagramPacket 类实现

发表评论

表情:
评论列表 (有 0 条评论,66人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java基础网络编程

    1. 网络编程概述 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了。 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信。网

    相关 JAVA网络编程基础

    Java为网络支持提供了java.net包,我们来看一下这个这个包里几个主要的类。 ![70][]![70 1][] ①InetAddress 对网络协议稍微有点了解的同