网络编程
预备知识
- 要学习网络编程首先要了解一些计算机网络的知识。
- 计算机网络三大要素:通信网络+服务器+客户端
- 服务器一般使用Linux、Unix或Windows Server等操作系统
- 不同于之前的非网络程序,网络编程既要求编写客户端应用程序有要求编写服务器端应用程序
- 遵循TCP/IP协议
- 应用层
- 传输层
- 网络层
- 链路层
- 比起UDP只发送不管对方收到没,TCP事先建立连接双向数据传输更可靠
- 网络上两台计算机之间的通信,本质上是两个网络应用程序之间的通信
- 统一资源定位符URL语法 protocol://[:port]path[?query]
Java API 提供的因特网地址类java.net.InetAddress
-
使用方法
import java.io.IOException; import java.net.*; public class JInetAddress { public static void main(String[] args) { try { InetAddress local = InetAddress.getLocalHost(); //获取本机的因特网地址对象 System.out.println("通过getLoaclHost获得本机因特网网址对象:"+local); System.out.println("获取主机名:"+local.getHostName()); System.out.println("获取主机IP地址:"+local.getHostAddress()); System.out.println(local.isReachable(1)); String cauWeb = "www.cau.edu.cn"; // 中国农业大学网站的主机名 InetAddress cau = InetAddress.getByName(cauWeb); // 根据主机名创建对象 System.out.println("通过主机名得本机因特网网址对象:"+cau); System.out.println("获取主机名:"+cau.getHostName()); System.out.println("获取主机IP地址:"+cau.getHostAddress()); } catch (UnknownHostException e){ e.printStackTrace(); } catch (IOException e) { System.out.println(e.getMessage()); } } }
-
实例化一个地址对象–通过静态方法 获取本机的因特网地址对象
InetAddress local = InetAddress.getLocalHost();
-
实例化一个地址对象–通过静态方法 根据主机名创建对象
InetAddress cau = InetAddress.getByName("www.cau.edu.cn");
-
注意InetAddress可能会抛出的UnknownHostException是勾选异常,必须处理
-
调用非静态方法查看主机名
System.out.println("获取主机名:"+local.getHostName());
-
调用非静态方法查看IP地址
System.out.println("获取主机IP地址:"+local.getHostAddress());
-
调用非静态方法查看是否连通
System.out.println(local.isReachable(1));
-
注意InetAddress可能会抛出的IOException是勾选异常,必须处理
java.net.URL 访问网络资源
import java.net.*;
import java.io.*;
public class JWebPageTest {
public static void main(String[] args) {
try { // 处理可能出现的勾选异常IOException
String url_str = "http://www.cau.edu.cn/index.html";
//String url_str = "https://www.oracle.com/technetwork/java/index.html";
URL url = new URL(url_str);
System.out.println("从网页读取信息: " +url);
InputStreamReader in = new InputStreamReader(url.openStream(),"UTF-8");
char cbuf[] = new char[3000]; //读3000字符
int len = in.read(cbuf);
for(int n=0;n<len;n++) {
System.out.print(cbuf[n]);
}
System.out.println("......\n以上是从网页读出的信息。");
System.out.println("字符编码是:"+in.getEncoding());
in.close();
}
catch(IOException e) { e.printStackTrace(); } // 捕捉并处理勾选异常
}
}