手写RPC---⑤网络模块之实现client

一、三个接口

1.client端

1.创建连接。
2.发送数据并等待响应
3.关闭连接。

public interface TransportClient {
        void connect(Peer peer);//连接到网络端点 Peer类(手写RPC---②协议类)

        InputStream write(InputStream data);

        void close();

}

2.server端

  • 1.启动、监听
  • 2.接受请求 接受到的请求只是一个InputStream,
    也就是一个byte数据流,得给它抽象成一个handler,
    从而让用这个网络模块的人去实现。
    于是就有了第三个接口 —>RequestHandler接口
  • 3.关闭监听
public interface TransportServer {
//RequestHandler什么时候传给Server  应该在初始化时
    void init(int port,RequestHandler handler);

    void start();

    void stop();
}

3.RequestHandler

处理网络请求的handler


public interface RequestHandler {
    //输入revice , 输出数据的通道toResp
    void  onRequest(InputStream recive, OutputStream toResp);
}

二、 clien实现类

public class HTTPTransportClient implements TransportClient {
    private  String url;
    @Override
        //连接网络 字符串拼接赋值给url
    public void connect(Peer peer) {
    this.url = "http://" + peer.getHost()  + ":" + peer.getPort();
    }

    @Override
    public InputStream write(InputStream data) {
        //用jdk自带的 http连接方法
        try {
            HttpURLConnection httpConn =(HttpURLConnection) new URL(url).openConnection();
            httpConn.setDoOutput(true);//输出数据
            httpConn.setDoInput(true);//读取数据
            httpConn.setUseCaches(false);//不区分大小写
            httpConn.setRequestMethod("POST");//请求方法 post

            httpConn.connect();//连接
            //连接成功后,需要把参数data数据 发送给server
            IOUtils.copy(data,httpConn.getOutputStream());//使用的是IO工具包的copy方法
            //获取http的code信息 成功或者失败
            int responseCode = httpConn.getResponseCode();
            if(responseCode == HttpURLConnection.HTTP_OK){
                                      //HTTP_OK 是 200
// 获取与此URL连接的资源的输入流。通过该方法返回的InputStream对象,可以读取与此URL连接的资源的数据。
                return httpConn.getInputStream();
            }else
                 return httpConn.getErrorStream();
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

    @Override
    public void close() {

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值