java:单套接字读写操作。全双工

2023-12-11

我必须实现使用特定源端口发送数据,同时监听该端口。全双工。有谁知道如何在java上实现它。我尝试创建单独的线程来侦听套接字输入流,但它不起作用。我无法将 ServerSocket 和客户端套接字绑定到相同的源端口,并且与 netty 相同。 双工无光泽有什么解决办法吗?

    init(){
    socket = new Socket(InetAddress.getByName(Target.getHost()), Target.getPort(), InetAddress.getByName("localhost"), 250);
    in = new DataInputStream(socket.getInputStream());
    out = new DataOutputStream(socket.getOutputStream());
    }

     private static void writeAndFlush(OutputStream out, byte[] b) throws IOException {
        out.write(b);
        out.flush();
      }


    public class MessageReader implements Runnable {

        @Override
        public void run() {
//this method throw exception EOF
          read(in);

          }
private void read(DataInputStream in){
 while (isConnectionAlive()) {
          StringBuffer strBuf = new StringBuffer();
          byte[] b = new byte[1000];
          while ((b[0] = bufferedInputStream.read(b)) != 3) {
            strBuf.append(new String(b));
          }
          log.debug(strBuf.toString());
        }
}
        }

你想做的事情很奇怪:AServerSocket是一个完全实现的套接字,它接受连接,它处理自己的消息,并且您绝对不能在其之上搭载另一个套接字。

使用 NIO 实现全双工相当简单:

  1. 创建一个Channel为您Socket在非阻塞模式下
  2. 添加对兴趣 OP 的读取
  3. 和一个人一起睡觉Selector's select() method
  4. 读取任何可读字节,写入任何可写字节
  5. 如果写入完成,则从感兴趣的 OP 中删除写入
  6. GOTO 3.
  7. 如果需要写入,请将字节添加到缓冲区,将写入添加到感兴趣的操作并唤醒选择器。 (稍微简化了,但我相信您可以在 Javadoc 中找到自己的方法)

这样,每次有空间时,您将完全加载传出缓冲区,并同时从传入缓冲区读取(好吧,单线程,但您不必完成写入即可开始读取等)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java:单套接字读写操作。全双工 的相关文章

  • 启动jetty服务器时出现NoClassDefFoundError

    我正在尝试在码头服务器中托管我的网络应用程序 spring 我将 war 文件复制到 jetty 服务器中的 webapp 文件夹中 我并不是想嵌入jetty服务器 而是试图在jetty内托管应用程序 如tomcat 我没有安装jetty
  • System.out 什么时候不会出现在 Java 控制台中?

    我明白任何要标准化的东西 System out 将出现在 Java 控制台窗口中 启用时 我在某个地方发现 在某些情况下可能无法尝试这样做 例如 在 Swing 应用程序中 是这样吗 基本上 什么情况或设置我不希望在控制台中看到标准输出 例
  • 让线程休眠的更好方法

    我一直在编写有关 Java 8 中 2D 图形的教程 当时 NetBeans 给了我一个提示 Thread Sleep会影响性能 然而 尽管我已经找到了几种更好的方法 但我还没有找到一种方法来包含它们而不弄乱代码 package platf
  • 使用 asyncore 读取网站

    我想异步阅读一个网站 据我所知 这是不可能的 urllib 现在我尝试使用普通套接字进行阅读 但是 HTTP 给我带来了麻烦 我遇到了各种时髦的编码 例如传输编码 分块 必须手动解析所有这些东西 我现在想编码 C 而不是 python 难道
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • 从列表中删除对象的最佳方法是什么

    我有以下逻辑来删除系统中的非活动用户 因为我们在迭代列表时无法删除行 有更好的方法来处理这个问题吗 List
  • Java ArrayList,在一行中获取多种类型(int、String 等)的用户输入

    我正在努力提高 Java 水平 我遇到的一个问题是获取用户输入 所有这些都在一行中 如下所示 System out println Please input numbers that you would like to work with
  • 无法加载标签“s:form”的标签处理程序类“org.apache.struts2.views.jsp.ui.FormTag”

    如果我在 NetbeansIDE 中运行代码 它会显示以下错误 org apache jasper JasperException InvestorConfirm jsp 53 12 PWC6032 无法加载标签处理程序类 org apac
  • 修改void函数的输入参数并随后读取它

    我有一个相当复杂的 java 函数 我想使用 jUnit 进行测试 并且我正在使用 Mockito 来实现此目的 这个函数看起来像这样 public void myFunction Object parameter doStuff conv
  • JPA 的 commit() 方法是否使实体分离?

    我现在一直在搜索JPA实体生命周期 但现在 关于实体生命周期存在一些缺失的点 我在 stackoverflow 的一篇帖子中找到了下图 请记住该图已被投票 根据此图 当我们持久化实体时 它就变成了托管实体 好的 没问题 当我们提交时 数据会
  • 如何在android中格式化长整型以始终显示两位数

    我有一个倒计时器 显示从 60 到 0 的秒数 1 分钟倒计时器 当它达到 1 位数字 例如 9 8 7 时 它显示 9 而不是 09 我尝试使用String format B 02d B x 我将 x 从 long 转换为字符串 它不起作
  • java:如何仅选择jtable中的一个单元格而不是整行

    在 jTable 中 我希望当用户单击单元格时 这句话会打印在屏幕上 I am cell in row X and column Y 其中 x 和 Y 是单击单元格的行和列 但我得到的是 例如 当我单击第 1 行和第 4 列中的单元格时 我
  • 从自定义类导入时,XMLBeans jar 无法签名

    在 NetBeans 中 我创建了一个 Exporter 类 该类使用 APACHE POI 将一些数据导出到 EXCEL 文件 而 APACHE POI 使用 XMLBeans 我通过下载 zip 二进制文件并手动添加 jar 来添加 A
  • 使用 HttpClient 在 java 中进行连接池 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 HttpClient 创建连接池 我必须频繁连接到同一台服务器 值得创建这样一个池吗 是否可以保持 HTTP 连接处于活动状
  • 如何使用 Maven 创建新的 Eclipse RCP 项目?

    如何使用 Maven 创建新的 Eclipse RCP 项目 最好是m2eclipse http maven apache org eclipse plugin html 我读到有一个关于 Eclipse 的 Maven 插件 Maven
  • Spring:在属性文件中定义@RequestMapping值

    是否可以定义a的值 RequestMapping在 Spring 中通过在属性文件中定义注释 实际上 我做了类似的事情 Controller RequestMapping xxx public class MyController 但我想存
  • onActivityresult 数据为空

    这是我的相机应用程序 我想在其中捕获图像并裁剪它 但它拍照保存在我的 myimage 目录中 但不执行裁剪功能 请我需要帮助 我是这个领域的新人 这是我的相机开源代码 Intent intent new Intent MediaStore
  • MongoDB 和 upsert 问题

    我有两个模型 1 资源假期 Id private String resourceID private List
  • 如何在JdbcTemplate中执行多批量删除?

    我想一次删除多个数据库条目 仅当 3 个字段匹配 此处 姓名 电子邮件 年龄 时 才应删除每个条目 如果我只想删除单个属性 我会选择 String sql DELETE FROM persons WHERE email IN JdbcTem
  • 尝试从输入流检索文本时应用程序挂起

    情况 我确实查看了您的代码 正如我怀疑的那样 您的问题与您发布的代码完全无关 您的 GUI 完全忽略 Swing 线程规则 并在主 Swing 事件线程 称为Event Dispatch T螺纹或EDT 由于该线程负责所有 Swing 绘图

随机推荐

  • 我可以在 CSS 媒体查询中使用“OR”吗?

    我正在尝试将以下三个媒体查询合并为一个 media only screen and max device width 480px media only screen and webkit min device pixel ratio 2 m
  • 使用 Swift 和 Storyboard 在两个 UIViewController 之间传递数据

    我使用下面的代码选择 UITableView 在 UIViewController 之间传递数据 void prepareForSegue UIStoryboardSegue segue sender id sender if segue
  • 查找两个子字符串之间的所有字符串

    我有以下字符串作为示例 string cat dog 我想提取所有锁定在 和 之间的字符串 因此输出将是 cat dog 我只知道如何提取第一次出现的情况 import re r re compile m r search string i
  • 为什么从 chrome 派生的 xpath 不起作用

    我正在尝试从中抓取数据科学网 这是特定页面我要和 下面是我用来提取摘要的代码 import lxml import requests url https apps webofknowledge com full record do prod
  • register_blueprint 不添加到 Flask 应用程序的路由

    我创建了一个带有路线的蓝图 并使用我的 Flask 应用程序注册了该蓝图 但是 我在请求路线时收到 404 我的代码有什么问题吗 from flask import Flask Blueprint bp Blueprint test nam
  • 在 t-sql 中获取每隔一行作为结果表

    我正在寻找一个返回列表的 t sql 脚本 该列表显示 Table1 分组中的每个第二值 例如 我有以下数据 表1 并想要所需的结果列表 Table1 Customer Quantity A 5 A 8 B 3 B 5 B 11 C 7 D
  • 在我的应用程序中全局改变滚动条的宽度

    我有一个在触摸屏计算机上运行的 WPF 应用程序 我想将应用程序中的所有滚动条更改得更宽 有没有办法在全球范围内做到这一点 你必须override the default template of scrollViewer增加垂直滚动条的宽度
  • 从 difflib 中获取更细粒度的差异(或者通过后处理差异来实现相同目的的方法)

    正在下载this页面并对其进行较小的编辑 更改第一个65在本段中68 然后我解析两个来源美丽汤并将它们与difflib url https secure ssa gov apps10 reference nsf links 02092016
  • 以 S+(版本 31 及更高版本)为目标需要在存在意图过滤器时定义 android:exported 的显式值]

    在 Android 12 中调试应用程序时 应用程序崩溃了 Android 12 要求您在主要 Activity 中添加一段代码 转到您的项目文件夹并打开 AndroidManifest xml 文件 在活动中添加以下代码 android
  • Rails edit.html.erb 参数错误

    作为 Rails 新手 我浏览了 Hartl 教程并尝试进行一些更改 我想允许用户编辑帖子 我称之为路线 并且当我去编辑路线时收到此错误 else object record is a Array record last record ra
  • 需要使用 get_the_tag_list($ID) WordPress 的帮助

    我正在制作一个新的 WordPress 模板 我只想以文本格式获取与帖子关联的标签列表 我在用 get the tag list id 但问题是它返回 URL 和文本 有没有办法只获取附加到帖子的标签的 文本 并用逗号分隔 i e 标签1
  • 如何在 Bootstrap 中使用间距实用程序类

    In this article我看到了 Bootstrap 4 Spacing Utility Classes 他使用m b lg in className div class row div class col sm 6 m b lg d
  • 具有不同布局的 RecyclerView.ViewHolders 中的 Android DataBinding

    我正在尝试在新项目中使用 androids 数据绑定功能 到目前为止我对此非常满意 但现在我在我的 recyclerviews viewholder 中遇到了一个问题 我的视图持有者使用不同的布局 基于创建时的视图类型 public Med
  • 访问临时内存中用户上传的视频时出现问题

    我正在尝试使用 html 输入类型将用户上传的视频提交到 youtubefile和 python 模块 youtube upload 提交表单后 处理方式如下 if request method POST video request FIL
  • Tensorflow Lite,图像大小零误差

    其实我的问题很简单 我想在tensorflow lite模型中使用我自己的数据 所以 我写了这行代码 root path r C Users 90531 Desktop dataset b image path os path join o
  • 用java抓取一个angularjs网站

    我需要抓取一个由 Angular 插入 内容的网站 而且需要用java来完成 我尝试过 Selenium Webdriver 因为我之前使用过 Selenium 来抓取动态性较低的网页 但我不知道如何处理 Angular 部分 除了页面头部
  • 命名空间命名约定

    对于那些编写可重用组件的人来说 如果要扩展 NET 框架的功能 您认为最佳实践是什么 例如 我目前正在创建一个 Pop3 库 因为 NET 中不存在该库 我是创建自定义命名空间还是使用System Net Mail 来自命名空间命名指南 命
  • 删除Python中每个元素的换行符

    我打开一个文本文件 现在文本文件中的每个元素都用换行符分隔 当我使用readlines 它将这个换行符保留在列表中 这是在每个元素之后 所以它看起来像这样 zebra n ant n 我想知道是否有一个简单的函数或代码片段可以用来删除该换行
  • 安装应用程序后,拖放不再起作用

    我有一个具有拖放功能来导入图像和视频的应用程序 在通过 Visual Studio 进行开发和测试时 从未出现过任何问题 通过设置项目安装后 应用程序中的所有内容都工作正常 除了拖放之外 这似乎什么也没做 是否有任何安全设置需要通过安装程序
  • java:单套接字读写操作。全双工

    我必须实现使用特定源端口发送数据 同时监听该端口 全双工 有谁知道如何在java上实现它 我尝试创建单独的线程来侦听套接字输入流 但它不起作用 我无法将 ServerSocket 和客户端套接字绑定到相同的源端口 并且与 netty 相同