hppt,一种通过任意网络媒介打通两台机器间 TCP 网络连接的方案

比如说,A 、B 两台机器不互通,但是 A 、B 都可以访问机器 C 上的 kafka ,那就可以用这个工具,通过 kafka 搭一个桥梁,使得 A 能访问 B 上任意的 TCP 端口。

首先clone本项目到本地,

github地址 GitHub - codingmiao/hppt: 一款可通过任意协议转发tcp端口的工具

gitee地址 hppt: 一款可通过任意协议转发tcp端口的工具

再mvn clean install把项目安装到maven本地仓库。

然后新建一个java工程,引入hppt-run以及kafka等maven依赖

        <dependency>
            <groupId>org.wowtools.hppt</groupId>
            <artifactId>run</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--继续添加其他依赖-->

然后就可以编写代码了:

编写一个服务端实现并在机器B上运行,你需要实现如下方法:

public class ServerDemo extends ServerSessionService<T> {

    public ServerDemo(SsConfig ssConfig) {
        super(ssConfig);
    }

    //初始化时需要做什么
    public void init(SsConfig ssConfig) throws Exception {
    }

    //怎样发送字节到客户端
    protected void sendBytesToClient(T ctx, byte[] bytes) {
    }

    //收到客户端的字节时,主动去调用receiveClientBytes(CTX ctx, byte[] bytes)

    //当客户端断开时需要做什么
    protected void closeCtx(T ctx) throws Exception {
    }

    //当本服务端关闭后,在此释放掉连接池等资源
    protected void doClose() throws Exception {
    }
}

完整的示例实现请参考这里

编写一个客户端实现并在机器B上运行,你需要实现如下方法:

public class ClientDemo extends ClientSessionService {
    public ClientDemo(ScConfig config) throws Exception {
        super(config);
    }

    //怎样连接到服务端
    protected void connectToServer(ScConfig config, Cb cb) throws Exception {
    }

    //怎样发送字节到服务端
    protected void sendBytesToServer(byte[] bytes) {
    }

    //收到客户端的字节时,主动去调用receiveServerBytes(byte[] bytes)
}

完整的示例实现请参考这里

随后,你就可以通过访问A的10022端口,来连接B上的SSH 22端口了。

总结:本文以kafka为例,介绍了如何通过hppt工具,打通两个无法连通的网络间的TCP连接。

另外,hppt也提供了常用的http、websocket协议支持,无需编写代码即可实现网络打通。

详见:

github

gitee

在HTTP请求中,常用的两种请求方式是GET和POST。 #### GET请求 GET请求主要用于从服务器获取资源。它会将请求参数附加在URL的后面,以键值对的形式呈现,多个参数之间用`&`符号连接。例如,在Vue项目中使用`fetch`函数发送的请求就是GET请求: ```javascript fetch("http://localhost:9090/user/page?pageNum=" + this.pageNum + "&pageSize=" + this.pageSize + "&username=" + this.username + "&email=" + this.email + "&address=" + this.address) .then(res => res.json()) .then(res => { // 处理响应数据 this.tableData = res.records; this.total = res.total; }); ``` GET请求的特点是参数会暴露在URL中,因此不太适合传递敏感信息。而且由于URL长度的限制,GET请求所能携带的参数数量也有限。不过,GET请求可以被浏览器缓存,适合获取那些不经常变化的数据。 #### POST请求 POST请求用于向服务器提交数据,通常用于创建或更新资源。与GET请求不同,POST请求将参数放在请求体中,而不是URL上。例如,在使用Spring提供的`RestTemplate`向WebService发送的put请求中(put请求与post请求类似,都是向服务器提交数据),使用`HttpHeader`类装载需要传递的参数(包括中文): ```java // 示例代码,模拟使用RestTemplate发送POST请求 RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); MultiValueMap<String, String> map= new LinkedMultiValueMap<>(); map.add("key", "value"); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers); ResponseEntity<String> response = restTemplate.postForEntity( url, request , String.class ); ``` POST请求的优点是可以传递大量的数据,并且参数不会暴露在URL中,相对更安全。它通常用于提交表单数据、上传文件等操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值