网络编程——Java的基本网络支持
来源:互联网 发布:tcl网络电视有蓝牙吗 编辑:程序博客网 时间:2024/06/05 04:48
Java为网络支持提供了java.net包,该包下的URL和URLConnection等类提供了以编程方式访问Web服务的功能,而URLDecoder和URLEncoder则提供了普通字符串和application/x-www-form-urlencoded MIME字符串相互转化的静态方法。
使用InetAddress
Java提供了InetAddress类来代表IP地址,InetAddress下还有两个子类:Inet4Address、Inet6Address,它们分别代表Internet Protocol version4(IPv4)地址和Internet Protocol version6(IPv6)地址。
InetAddress类没有提供构造器,而是提供了如下两个静态方法来获取InetAddress实例。
◆getByName(String host):根据主机获取对应的InetAddress对象。
◆getByAddress(byte[] addr):根据原始IP地址来获取对应的InetAddress对象。
InetAddress还提供了如下三个方法来获取InetAddress实例对应的IP地址和主机名。
◆String getCanonicalHostName():获取此IP地址的全限定域名。
◆String getHostAddress():返回该InetAddress实例对应的IP地址字符串(以字符串形式)。
◆String getHostName():获取此IP地址的主机名。
除此之外,InetAddress还提供了一个isReachable()方法,用于测试是否可以到达该地址。该方法将尽最大努力试图到达主机,但防火墙和服务器配置可能阻塞请求,使得它在访问某些特定的端口时处于不可达状态。如果可以获得权限,典型的实现将使用ICMP ECHO REQUEST;否则它将试图在目标主机的端口7(Echo)上建立TCP连接。
import java.net.InetAddress;public class InetAddressTest {public static void main(String[] args) throws Exception {// 根据主机名来获取对应的InerAddress实例InetAddress ip = InetAddress.getByName("www.crazyit.org");// InetAddress ip = InetAddress.getByName("www.baidu.com");// 判断是否可达System.out.println("crazyit是否可达:" + ip.isReachable(2000));// System.out.println("baidu是否可达:" + ip.isReachable(2000));// 获取该InetAddress实例的IP字符串System.out.println(ip.getHostAddress());// 根据原始IP地址来获取对应的InetAddress实例InetAddress local = InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 });System.out.println("本机是否可达:" + local.isReachable(5000));// 获取该InetAddress实例对应的全限定域名System.out.println(local.getCanonicalHostName());}}
使用URLDecoder和URLEncoder
URLDecoder和URLEncoder用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转化。
当URL地址里包含非西欧字符的字符串时,系统会将这些非西欧字符串转换成特定的字符串,也就是我们常说的“乱码”,即application/x-www-form-urlencoded MIME字符串。
编程过程中可能涉及普通字符串和这种特殊字符串的相关转换,这就需要使用URLDecoder和URLEncoder类。
◆URLDecoder类包含一个decode(String s, String enc)静态方法,它可以将看上去是乱码的特殊字符串转换成普通字符串。
◆URLEncoder类包含一个encode(String s, String enc)静态方法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。
import java.net.URLDecoder;import java.net.URLEncoder;public class URLDecoderTest {public static void main(String[] args) throws Exception {// 将application/x-www-form-urlencoded MIME字符串// 转换成普通字符串// 其中的字符串直接从浏览器复制过来String url = "http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&cl=2&lm=-1&word=osi%E5%92%8Ctcp%20ip%E6%A8%A1%E5%9E%8B%E7%BB%93%E6%9E%84&z=0&ie=utf-8&fr=map0000";String keyWord = URLDecoder.decode(url, "utf-8");System.out.println(keyWord);// 将普通字符串转成// application/x-www-form-urlencoded MIME字符串String str = "百度一下,你就知道";String urlStr = URLEncoder.encode(str, "GBK");System.out.println(urlStr);}}
URL、URLConnection和URLPermission
URL(Uniform Resource Locator)对象代表统一资源定位器,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂对象的引用,例如对数据库或搜索引擎的查询。在通常情况下,URL可以由协议名、主机、端口和资源组成,即满足如下格式:
protocol:///host:port/resourceName
例如如下的URL地址:
http://www.baidu.com
提示:
JDK中还提供了一个URI(Uniform Resource Identifiers)类,其实例代表一个统一资源标识符,Java的URI不能用于定位任何资源,它的唯一作用就是解析。与此对应的是,URL则包含一个可打开到达该资源的输入流,可以将URL理解成URI的特例。
URL类提供了多个构造器用于创建URL对象,一旦获得了URL对象之后,就可以调用如下方法来访问该URL对应的资源。
◆String getFile():获取该URL的资源名。
◆String getHost():获取该URL的主机名。
◆String getPath():获取该URL的路径部分。
◆int getPort():获取该URL的端口号。
◆String getProtocol():获取该URL的协议名称。
◆String getQuery():获取该URL的查询字符串部分。
◆URLConnection openConnection():返回一个URLConnection对象,它代表了与URL所引用的远程对象的连接。
◆InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。
0 0
- 网络编程——Java的基本网络支持
- 网络编程(1)--Java的基本网络支持
- Java的基本网络支持
- Java网络编程_基本网络支持(一)
- Java网络编程_基本网络支持(二)
- Java网络编程_基本网络支持(三)
- java网络编程——第一章 基本网络概念
- Java网络编程的基本使用
- JAVA的网络支持
- 基本网络概念(Java网络编程)
- Java网络编程 基本网络概念
- Java网络编程—(1)网络的简介
- java网络编程协议与基础1—基本网络概念
- java中的网络支持-socket编程
- <java——网络编程>
- JAVA——网络编程
- Java——网络编程
- Java——网络编程
- 为什么你要写博客?
- 主题:Linux文件系统简介
- 常用类练习
- JPA学习笔记1——JPA基础
- 算法-求二进制数中1的个数
- 网络编程——Java的基本网络支持
- 8种排序
- Codeforces Round #321 (Div. 2) 简要记录
- Linux X11 forwarding enable
- Q&A: HOW TO FIX XCODE’S "USED AS THE NAME OF THE PREVIOUS PARAMETER" WARNING
- HadoopWeb界面:Hadoop Non DFS Used concept
- 解决需求(刷新页面是select下拉框还原成第一个选项)
- 低效程序员的7个坏习惯-兄弟连IT教育
- JPA学习笔记2——JPA高级