(八)、Java 网络编程

所谓计算机网络,就是把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地传递信心,共享资源。
计算机网络通常按照规模大小可以划分为:局域网、城域网、广域网
按照拓扑结构可以分为:星型网络、总线网络、环形网络、树形网络等

1、OSI七层模型

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

2、Java网络支持

Java为网络提供了java.net包,该包下提供了以编程方式访问Web服务的功能。

2.1、InetAddress

  • getByName(String host) 根据主机获取响应的InteAddress对象
  • getByAddress(byte[] addr) 根据原始的IP地址获取响应的InterAddress对象
  • String getHostAddress() 获取IP地址字符串
  • String getHostName() 返回IP地址的主机名
public class App {

    public static void main(String[] args) throws UnknownHostException {

        //根据主机名获取InetAddress实例
        InetAddress a = InetAddress.getByName("www.baidu.com");
        InetAddress local = InetAddress.getByAddress(new byte[]{127,0,0,1});
        System.out.println(local);
        //获取实例的IP地址
        String ip = a.getHostAddress();
        System.out.println(ip);
    }
}

2.2、URLDecoder/URLEncoder

URLDecoder/URLEncoder完成普通字符串与 application/x-www-form-urlencoder MIME 字符串之间的转换。

  • URLDecoder.decode(String s,String enc)
  • URLEncoder.encode(String s,String enc)
public class Coder {

    public static void main(String[] args) throws UnsupportedEncodingException {

        String decode = URLDecoder.decode("%D1%F4%B9%E2","GBK");
        System.out.println(decode);

        String encoder = URLEncoder.encode("网络编程","GBK");
        System.out.println(encoder);

    }

}

输出

2.3、URL/URLConnection

URL-统一资源定位符,它是指向互联网的指针,URL可以有协议名,主机,端口和资源组成。
URL类提供了多个构造方法,获取URL对象后,可以使用以下方法来获取相应的资源:
1. String getFile() 获取URL资源名
2. String getHost() 获取URL的主机名
3. String getPath() 获取URL的路径部分
4. int getPort() 获取URL的端口号
5. String getProtocol() 获取URL的协议名称
6. String getQuery() 获取URL的查询字符串部分
7. URLConnection openConnection() 返回一个URLConnection对象,与远程资源相连接
8. InputStream openStream() 打开与此URL的连接,并返回输入流


通常创建一个和URL的连接,并发送请求、读取此URL引用的资源需要以下几步:
1. 通过openConnection方法创建URLConnection对象
2. 设置URLConnection对象的参数和请求属性
3. 如果只是发送GET请求,使用connect()方法建立和远程资源之间的实际连接即可;若要使用POST方式进行请求,则需要获取URLConnection实例对应的输出流来发送请求数据

2.3.1、发送GET/POST请求并获取返回

package com.xiaopeng.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

public class GET_POST_test {

    /**
     * 向指定的URL发送GET请求
     *
     * @param url   发送请求的URL
     * @param param 请求参数
     * @return result 请求的响应
     */
    private static String sendGet(String url, String param) {
        String result = "";
        String urlName = url + "?" + param;
        URLConnection conn = null;

        try {
            URL realUrl = new URL(urlName);
            conn = realUrl.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");
            //建立实际连接
            conn.connect();
            Map<String, List<String>> resMap = conn.getHeaderFields();
            //遍历所有的响应头字段
            System.out.println("================输出返回响应头================");
            for (String key : resMap.keySet()) {
                System.out.println(key + " --> " + resMap.get(key));
            }
            System.out.println("================输出返回响应体================");
            //读取URL的响应
            BufferedReader br = new BufferedReader
                    (new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = br.readLine()) != null) {
                result += "\n" + line;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * 向指定的URL发送POST请求
     *
     * @param url   发送请求的URL
     * @param param 请求参数
     * @return 远程资源的返回
     */
    private static String sendPost(String url, String param) {

        String resPost = "";
        URLConnection conn = null;
        try {
            URL realURL = new URL(url);
            conn = realURL.openConnection();
            //设置请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");

            //必须设置
            conn.setDoInput(true);
            conn.setDoOutput(true);

            PrintWriter out = new PrintWriter(conn.getOutputStream());
            //发送请求参数
            out.print(param);
            //flush输出流刷新缓冲区
            out.flush();

            BufferedReader br = new BufferedReader
                    ((new InputStreamReader(conn.getInputStream(), "utf-8")));

            String line;
            while ((line = br.readLine()) != null) {

                resPost += "\n" + line;

            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return resPost;
    }


    public static void main(String[] args) {
        System.out.println("get方式请求");
        String getRes = GET_POST_test.sendGet
                ("http://blog.csdn.net/no_cainiao/article/details/79371768", null);
        System.out.println(getRes);

        System.out.println("post方式请求");
        String postRes = GET_POST_test.sendPost("https://go.java/index.html", "intcmp=gojava-banner-java-com");
        System.out.println(postRes);
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值