我已经构建了一个打开ServerSocket的简单应用程序,并在连接时将其自身连接到远程计算机上的另一个服务器套接字。为了实现端口转发,我使用了两个线程,一个线程从本地输入流读取并向远程套接字输出流读取流,反之亦然。

该实现感觉有点差劲,所以我问您是否知道更好的实现策略,或者是否有一些代码可以以高效的方式实现。

PS:我知道我可以在Linux上使用IPTables,但是必须在Windows上才能使用。

PPS:如果您发布此简单任务的实现,我将创建一个基准测试所有给定的实现。对于许多小型(〜100bytes)封装和稳定的数据流,该解决方案应该是快速的。

我当前的实现是这样(在每个方向的两个线程中的每个线程上执行):

public static void route(InputStream inputStream, OutputStream outputStream) throws IOException {

byte[] buffer = new byte[65536];

while( true ) {

// Read one byte to block

int b = inputStream.read();

if( b == - 1 ) {

log.info("No data available anymore. Closing stream.");

inputStream.close();

outputStream.close();

return;

}

buffer[0] = (byte)b;

// Read remaining available bytes

b = inputStream.read(buffer, 1, Math.min(inputStream.available(), 65535));

if( b == - 1 ) {

log.info("No data available anymore. Closing stream.");

inputStream.close();

outputStream.close();

return;

}

outputStream.write(buffer, 0, b+1);

}

}

java 端口转发_用Java快速实现端口转发相关推荐

  1. java array缓存_有java数组

    [JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...

  2. java 分割一个_分割java

    [java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...

  3. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  4. java 持续交付_【Java架构:持续交付】一篇文章搞掂:Jenkins

    1.1.使用yum安装JDK a.检查系统是否有安装open-jdk rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输入信息表示 ...

  5. java 进程运行时间_将Java类作为子进程运行

    java 进程运行时间 我本周需要将Java类(而不是jar)作为子进程运行. 更确切地说,我想从测试内部产生一个新进程,而不是直接在测试内部(进程内)运行它. 我不认为这是幻想或复杂的事情. 但是, ...

  6. java高级教程_高级Java教程

    java高级教程 课程大纲 学习Java基础很容易. 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员. 网络上充斥着"软","便宜 ...

  7. java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)

    import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...

  8. 纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...

    最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题.我大概是分成了Java基础.中级.高级,分布式,Spring架构,多线程,网络,MySQL,Redis缓存,JVM相关,调优,设计模式,算法与 ...

  9. java 入门程序_自学 Java 怎么入门?

    自学Java的确不易,但是有一份好的学习路线图,跟着路线图来一步一步踏踏实实的学下来,相信你也一定可以成为大牛. 分享给大家一套学习线路图,内容还是很全面的,每个阶段需要学习的内容罗列的也很清楚,这样 ...

  10. acm用java怎么写_用java来写ACM

    前言 从去年10月份开始就一直都在九度oj平台写acm,到今天在九度oj的总排名已经到了第6名,收获很多特别是算法和数据结构方面的提高,这种提高直接反映在我找工作的顺利中 但是人总要学会拥抱变化,特别 ...

最新文章

  1. Hibernate、JPA、Spring Data JPA,傻傻分不清
  2. 2021-1-17 随笔
  3. 休斯顿大学提出BCI-机器人(脑-外骨骼接口系统)可以改善运动恢复
  4. B站开源动漫画质修复模型,超分辨率无杂线无伪影,还是二次元最懂二次元
  5. 递归 || 递归的相关实例练习
  6. boost::gil模块数字扩展中的 resize_view() 示例
  7. SLF4J:Failed to load class org.slf4j.impl.StaticLoggerBinder
  8. php5.2 array,详解php 5.2.x 数组操作实例
  9. 什么是kubernetes_Kubernetes为什么如此受欢迎?
  10. 编程语言-jul2014
  11. “我不是个优秀的 Web 开发人员,我只是擅长搜索谷歌”
  12. ffmpeg之让视频快进
  13. Atitit 物联网体系图 感知层 条码:物联网的第一代身份证 65二维码 4 电子标签:物联网的第二代身份证 78 4 传感器:物联网的神经元 92 4 自动识别技术 光学字符识别技术
  14. ENVI操作:监督分类
  15. 计算机毕业设计论文资料查找
  16. 网页加速之Prefetching VS Prerendering
  17. [IOS APP]南渡记-东藏记-西征记-野葫芦引有声小说
  18. 蓝桥杯试题 算法提高 Cutting Chains
  19. S@Kura的PHP进阶之路(二)
  20. 流媒体播放器播放h264编码视频与h265编码视频哪个更清晰?

热门文章

  1. The value for the useBean class attribute com.wrox.errors.User is invalid
  2. LinQ学习之旅(1)
  3. 47 - 算法 - Leetcode-160 -相交链表
  4. 50 - 算法 -二叉树 - 递归 - LeetCode 101
  5. linux用户管理和群界面怎么打开,Linux的用户和组群管理
  6. empinfo Oracle数据库,Oracle:其他数据库对象
  7. python 模块 类 函数_Python17之函数、类、模块、包、库
  8. .net 宏定义_C语言基础知识:几种特殊的函数宏封装方式
  9. 阿尔伯塔大学知名计算机工程学教授,关于加拿大阿尔伯塔大学电气与计算机工程学院教授来我校作学术报告的通知...
  10. clion 插件_IDEA必备插件系列-Rainbow