• java入门16 -- http编程


    对于网络时代,我们有必要学习http编程,目前,我们只是简单学习一下客户端的请求,服务端的到时候可以使用框架来学习,这样才更加高效

    import java.io.*;
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.time.Duration;
    
    public class HelloWorld {
    
        static HttpClient hc = HttpClient.newBuilder().build();
    
        public static void main(String[] args) throws Exception {
            // 网上随表找的福字,要过年啦
            String url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1578810765139&di=1af3228d51e29f5a1d61d12c387eb56c&imgtype=0&src=http%3A%2F%2Fpic.51yuansu.com%2Fpic3%2Fcover%2F02%2F42%2F72%2F59e4d3e5d8a7e_610.jpg";
            // 建立请求,默认是发送get请求
            HttpRequest request = HttpRequest.newBuilder(new URI(url))
                    .header("User-Agent", "Java HttpClient")
                    .header("Accept", "*/*")
                    .timeout(Duration.ofSeconds(5))
                    .version(HttpClient.Version.HTTP_2).build();
            // 发送请求,并获取响应对象
            HttpResponse<byte[]> response = hc.send(request, HttpResponse.BodyHandlers.ofByteArray());
            // 如果文件比较大,可以改写为流传输
            HttpResponse<InputStream> response2 = hc.send(request, HttpResponse.BodyHandlers.ofInputStream());
            // 将请求到的文件保存到本地,如果文件比较大,可以使用流传输,只需要将上面的 HttpResponse.BodyHandlers.ofByteArray(),
            try (OutputStream o = new FileOutputStream("./img.jpg")) {
                o.write(response.body());
            }
            // 然后使用流传输进行保存文件
            try (OutputStream o = new FileOutputStream("./img2.jpg")) {
                try (InputStream i = response2.body()) {
                    var b = new byte[10];
                    while (i.read(b) != -1) {
                        o.write(b);
                    }
                }
            }
        }
    }

    接下来看一下RMI的远程过程调用

    其实这个grpc原理差不太多,感觉grpc更强一点,跨平台使用,但是这个更切合java

    首先看一下server端,注意这个端口使双方信任的端口,千万不要暴露公网,以防被攻击

    import java.rmi.Remote;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    import java.rmi.server.UnicastRemoteObject;
    
    // 这个需要继承Remote 以低昂需要抛出这个异常
    interface MyName extends Remote {
        String getName() throws RemoteException;
    }
    
    class MyNameService implements MyName {
        @Override
        public String getName() throws RemoteException {
            return "xiao hong";
        }
    
    }
    
    public class Server {
        public static void main(String[] args) throws Exception {
            // 首先起一个实例
            MyName myName = new MyNameService();
            // 然后开始将这个转化为远程接口
            MyName sn = (MyName) UnicastRemoteObject.exportObject(myName, 0);
            // 这个就是注册的端口,一般默认是1099,注意这个端口不要被别的占用
            Registry ry = LocateRegistry.createRegistry(1099);
            // 然后进行注册服务
            ry.rebind("MyName", sn);
        }
    }

    再看一下client端

    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    
    public class Client {
        public static void main(String[] args) throws Exception {
            // 首先进行连接
            Registry ry = LocateRegistry.getRegistry("127.0.0.1", 1099);
            // 然后查询这个注册的服务
            MyName myName = (MyName) ry.lookup("MyName");
            // 进行接口调用
            String name = myName.getName();
            System.out.println(name);
        }
    }
  • 相关阅读:
    CCCC L2-023. 图着色问题【set去重判不同种类个数/简单图论/判断两相邻点是否存在同色以及颜色个数】
    百练 04 简单的整数划分问题
    NYOJ90 整数划分(经典递归和dp)
    图遍历问题
    图着色问题
    Java 大数(整数+浮点数) 基本函数
    根据规律绘制图形(俗称蛇皮走位)
    KMP算法之我见
    CCCC L1-039. 古风排版【图形输出/循环控制行列/模拟/细节】
    HYSBZ 2818 Gcd【欧拉函数/莫比乌斯】
  • 原文地址:https://www.cnblogs.com/yangshixiong/p/12182413.html
Copyright © 2020-2023  润新知