api有哪些 javasocket_Java 之 网络常用API

Java程序可以非常方便的访问互联网上的 HTTP 服务、FTP 服务等,并可以直接取得互联网上的远程资源,还可以向远程资源发送 GET、POST 请求。

一、InetAddress 类

此类表示互联网协议(IP)地址,它有两个子类 Inet4Address 和 Inet6Address,分别对应IPV4和IPV6。InetAddress 类没有提供公共的构造器,而是提供了几个静态方法来获取 InetAddress 实例。

获取InetAddress实例方法:

static InetAddress getLocalHost() :返回本地主机。

static InetAddress getByName(String host):在给定主机名的情况下确定主机的 IP 地址

static InetAddress getByAddress(byte[] addr) :在给定原始 IP 地址的情况下,返回 InetAddress 对象。

static InetAddress getByAddress(String host, byte[] addr) :根据提供的主机名和 IP 地址创建 InetAddress

static InetAddress[] getAllByName(String host):在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组

常用方法:

public String getHostAddress():返回 IP 地址字符串(以文本表现形式)。

public String getHostName():获取此 IP 地址的主机名

public String getCanonicalHostName():获取此 IP 地址的完全限定域名

public boolean isReachable(int timeout):测试是否可以达到该地址。

public byte[] getAddress() :返回此 InetAddress 对象的原始 IP 地址

Demo:

1 public classTestInetAddress {2 public static void main(String[] args) throwsException{3 InetAddress ip1 =InetAddress.getLocalHost();4 System.out.println(ip1);//njf/192.168.233.1

5

6 InetAddress ip2 = InetAddress.getByName("www.baidu.com");7 System.out.println(ip2);//www.baidu.com/182.61.200.6

8

9 byte[] ip = {(byte)182,61,(byte)200,6};10 InetAddress ip3 =InetAddress.getByAddress(ip);11 //输出ip而不是域名。如果这个IP地址不存在或DNS服务器不允许进行ip-->域名的映射,getHostName()方法就直接返回这个IP地址

12 System.out.println(ip3);13 }14 }

二、URL

URI(Uniform resource identifier):表示一个统一资源标识符 (URI) 引用,用来唯一的标识一个资源。

URL(Uniform Resource Locator):类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。URI不能用于定位任何资源,它的唯一作用是解析,而URL则包含一个可打开到达该资源的输入流。

URL的基本结构由5部分组成:

://:/#片段名

://:/?参数列表

其中 # 片段名: 即锚点

例如:http://java.sun.com/index.html#chapter1

参数列表格式:参数名=参数值&参数名=参数值....

例如:http://192.168.1.100:8080/helloworld/index.jsp?username=chai&password=123

URL构造方法:

public URL (String spec):通过一个表示URL地址的字符串可以构造一个URL对象

public URL(URL context, String spec):通过基 URL 和相对 URL 构造一个 URL 对象

URL(String protocol, String host, String file) :根据指定的 protocol 名称、host 名称和 file 名称创建 URL

URL(String protocol, String host, int port, String file):根据指定 protocol、host、port 号和 file 创建 URL 对象

Demo:

1 URL url = new URL ("http://www.baidu.com/");2 URL downloadUrl = new URL(url, "download.html");3 URL url2 = new URL("http", "www.baidu.com", “download. html");

4 URL gamelan = new URL("http", "www.baidu.com", 80, “download.html");

URL常用方法:

public String getProtocol():获取该URL的协议名

public String getHost():获取该URL的主机名

public String getPort():获取该URL的端口号

public String getPath():获取该URL的文件路径,即tomcat的webapps目录下级目录名也就是资源路径名

public String getFile():获取该URL的文件名

public String getRef():获取该URL在文件中的相对位置

public String getQuery():获取该URL的查询名

public final InputStream openStream():返回一个用于从该连接读入的 InputStream。

public Object getContent():获取次 URL 的内容

Demo1:

1 importjava.net.MalformedURLException;2 importjava.net.URL;3

4 public classTestURL {5 public static void main(String[] args) throwsMalformedURLException {6 URL url = new URL("http://www.baidu.com:80/index.html?keyword=java");7 System.out.println("协议:" + url.getProtocol()); //协议:http

8 System.out.println("主机名:" + url.getHost()); //主机名:www.baidu.com

9 System.out.println("端口号:" + url.getPort()); //端口号:80

10 System.out.println("路径名:" + url.getPath()); //路径名:/index.html

11 System.out.println("文件名:" + url.getFile()); //文件名:/index.html?keyword=java12 //注意如果存在锚点,那么查询名返回null,因为#后面全部当做锚点了

13 System.out.println("锚点:" + url.getRef()); //锚点:null

14 System.out.println("查询名:" + url.getQuery()); //查询名:keyword=java

15 }16 }

Demo2:

1 importjava.io.InputStream;2 importjava.net.URL;3

4 public classTestURLRead {5 public static void main(String[] args)throwsException {6 URL url = new URL("http://www.baidu.com/index.html");7 /*html标签(格式化数据)、css:皮肤(美化数据)、js:互动(交互数据)、数据:*/

8 InputStream input =url.openStream();9 byte[] data = new byte[1024];10 intlen;11 while((len=input.read(data))!=-1){12 System.out.println(new String(data,0,len,"UTF-8"));13 }14 input.close();15 }16 }

三、URLConnection

URL的方法openStream(),能从网络上读取数据,但是无法给服务器端发送数据,若希望给服务器端发送数据,则需要URLConnection。

它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:

1. 通过 URL 对象调用 openConnection 方法创建 URLConnection 对象;

2. 处理设置参数和一般请求属性;

3. 使用 connect 方法建立到远程对象的实际连接;

4. 远程对象变为可用,远程对象的头字段和内容变为可访问。

常用方法:

public void setDoOutput(boolean dooutput)如果打算使用 URL 连接进行输出,例如给服务器传递请求参数,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。 必须在所有getXXX()和connect()方法之前。

public String getContentEncoding():返回 content-encoding 头字段的值。

public int getContentLength():返回 content-length 头字段的值。

public String getContentType():返回 content-type 头字段的值。

public long getDate():返回 date 头字段的值。

public long getLastModified():返回 last-modified 头字段的值。结果为距离格林威治标准时间 1970 年 1 月 1 日的毫秒数。

public String getHeaderField(String name):返回指定的头字段的值。

public InputStream getInputStream()返回从此打开的连接读取的输入流。

public OutputStream getOutputStream()返回写入到此连接的输出流。

Demo:

1 importjava.io.BufferedReader;2 importjava.io.InputStream;3 importjava.io.InputStreamReader;4 importjava.net.URL;5 importjava.net.URLConnection;6

7 public classTestURLConnection {8 public static void main(String[] args) throwsException{9 URL url = new URL("http://localhost/web1/login");10 //通过 URL对象调用 openConnection 方法创建URLConnection连接对象

11 URLConnection uc =url.openConnection();12 //处理设置参数

13 uc.setDoOutput(true);14 //给服务器发送请求参数

15 uc.getOutputStream().write("username=admin&password=123".getBytes());16 //使用 connect 方法建立到远程对象的实际连接。

17 uc.connect();18 //获取资源

19 InputStream is =uc.getInputStream();20 BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));21 String str;22 while((str=br.readLine())!=null){23 System.out.println(str);24 }25 br.close();26 }27 }

四、Socket

通信的两端都要有Socket(也可以叫“套接字”),是两台机器间通信的端点。可以和网卡驱动进行交流,负责把数据交给网卡驱动,或者从网卡驱动中提取数据。网络通信其实就是Socket间的通信。

Socket 可分为:

流套接字(stream socket):使用 TCP 提供可依赖的字节流服务(ServerSocket类和Socket类)

数据包套接字(datagram socket):使用 UDP 提供“尽力而为” 的数据报服务(DatagramSocket类)

Socket 类的常用构造方法:

public Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

public Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

Socket 类的常用方法:

public InputStream getInputStream():返回此套接字的输入流,可以用于接收消息

public OutputStream getOutputStream():返回此套接字的输出流,可以用于发送消息

public InetAddress getInetAddress():此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null。

public InetAddress getLocalAddress():获取套接字绑定的本地地址。

public int getPort():此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0。

public int getLocalPort():返回此套接字绑定到的本地端口。如果尚未绑定套接字,则返回 -1。

public void close():关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。

public void shutdownInput():如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。

public void shutdownOutput():禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。

注意:

先后调用Socket的shutdownInput()和shutdownOutput()方法,仅仅关闭了输入流和输出流,并不等于调用Socket的close()方法。在通信结束后,仍然要调用Scoket的close()方法,因为只有该方法才会释放Socket占用的资源,比如占用的本地端口号等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值