计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。网络编程就是编写程序使互联网的两个或多个设备(如计算机)之间进行数据传输。Java
语言对网络编程提供了良好的支持。通过其提供的接口我们可以很方便地进行网络编程。
IP地址相关操作
InetAddress
是
Java
对
IP
地址的封装。其下有两个子类
Inet4Address
和
Inet6Address
。这个类的实例经常和UDP DatagramSockets
和
Socket
,
ServerSocket类一起使用InetAddress
没有公开的构造方法,因此你必须通过一系列静态方法中的某一个来获取它的实例。
//www.baidu.com 实际上是主机名称//IPv4 采用的是点分十进制的记法,所以难以记忆,// 引入 DNS 可以将一个有含义的字符串和一个 IP 地址建立对应关系,当使用有含义的字符串时可以通过 DNS 转换为 IP 地址//InetAddress 对象中可以封装一个 IP 地址和一个主机名InetAddress ia = InetAddress . getByName ( "www.baidu.com" ); // 获取对应主机名称的 IP 地址,会自动调用 DNS 服务System . out . println ( ia );System . out . println ();InetAddress [] arr = InetAddress . getAllByName ( "www.baidu.com" ); // 获取对应主机名称的所有注册 IP 地址for ( InetAddress tmp : arr )System . out . println ( tmp );System . out . println ();// new InetAddress() 没有提供可以直接使用的构造器,所以不能直接 new 创建对象ia = InetAddress . getLocalHost (); // 获取本地机的 IP 地址System . out . println ( ia ); //lover/172.30.1.101ia = InetAddress . getLoopbackAddress (); // 获取回绕地址System . out . println ( ia ); //localhost/127.0.0.1System . out . println ( ia . getClass ()); //class java.net.Inet4AddressSystem . out . println ();// 通过 IP 地址查询对应信息InetAddress ia1 = InetAddress . getByName ( "14.215.177.39" );System . out . println ( ia1 );// 用于判断是否可以连接 ia 对象对应的主机,可以理解为尝试是否能够 ping 通System . out . println ( ia1 . isReachable ( 2000 ));
URL访问网上资源
URL
对象代表统一资源定位器,是指向互联网资源的指针,资源可以是简单的文件或目录,也可以是对复杂对象的引用,例如对数据库或搜索引擎的查询。用协议名、主机、端口和资源组成,即满足格式
http 协议的标准端口为 80 https=http+SSL 加密数据传输的 http ,标准端口为 443URL 统一资源指针,可以指定一个具体的资源,例如一个 html 网页URI 统一资源标识符,可以认为为了方便记忆,给 URL 起的别名
构建URL对象
创建一个 URL 对象,用于指代网络中的一个资源,如果网址不合法,则抛出 MalformedURLException最重要的方法:
- url.openConnection():URLConnection 可以获取输入、输出流
- url.openStream():InputStream 直接获取输入流
不重要的方法:通过 URL 对象的一些方法可以访问该 URL 对应的资源:
- String getFile():获取该URL的资源名
- String getHost():获取主机名
- String getPath():获取路径部分
- int getPort():获取端口号
URL与URLConnection比较
URL
和
URLConnection
的区别在于前者代表一个资源的位置
,
后者代表一种连接
Java
语言提供了两种方法读取数据,一种是通过
URL
对象直接得到相关的网络信息
InputStream is =url.openStream();
,另一种是先得到一个
URLConnection
实例,再得到
InputStream
或
InputStream 对象,然后读取数据
URLConnection conn = url.openConnection();
InputStream is1 = conn.getInputStream();
OutputStream os1 = conn.getOutputStream();
前者是一种简单、直接的方法,但缺乏灵活性,并且只能读取只读信息,后者提供了更加灵活有效的方法来读取网络资源
TCP编程
在实际应用中
TCP
网络程序提供可靠的数据通信,而
UDP
网络程序则不保证数据的可靠性,但是协议简单、传输速度快(比如用在音视频数据传输,它们不需要很高的可靠性,偶尔丢帧是可以忍受的)
- TCP是Tranfer Control Protocol的 简称,是一种面向连接的端对端的保证可靠传输的协议。
- 通过TCP协议传输,得到的是一个顺序的无差错的数据流。
发送方和接收方的成对的两个
socket
之间必须建立连接,以便在
TCP
协议的基础上进行通信,当一个socket(通常都是
server socket
)等待建立连接时,另一个
socket
可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。