- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Apache Camel Mina 作为我的套接字服务器来接收字节流。我正在使用 Apache Camel 2.12.1,这是我的简单路线:
<route id="retriever">
<from uri="mina2:tcp://127.0.0.1:5555?sync=false" />
<convertBodyTo type="java.lang.String" />
<to uri="file:temp/out" />
</route>
我可以完美地启动路由并使用telnet发送数据。当我使用简单的 Java 测试客户端发送数据时,我的问题出现了:
byte[] myData = {0x34, 0x12, 0x25, 0x34};
Socket socket = new Socket("127.0.0.1", 5555);
OutputStream os = socket.getOutputStream();
os.write(myData, 0, myData.length);
os.flush();
socket.close();
使用此客户端时,我在任何地方都没有遇到任何异常,但数据没有进入 Camel 路由。我一直在尝试实现自己的编解码器,并检查 MINA 是否正在接收数据,但我不确定对于这个简单的情况是否需要一个特殊的编解码器。我只想检索字节数组并保存它。
所以我的问题是:我做错了什么?为什么默认的 mina2 编解码器不适用于我的场景?我是否在 mina 端点中缺少任何特殊选项来允许此操作?
谢谢!
最佳答案
如果您指的是 TextLineCodecFactory 那么您应该检查源代码。该编解码器的解码器使用分隔符(框架运行的操作系统的新行)。
TextLineCodecFactory , TextLineDecoder , LineDelimiter
检查解码器。特别检查这部分
226 private void decodeAuto(Context ctx, IoSession session, IoBuffer in, ProtocolDecoderOutput out)
227 throws CharacterCodingException, ProtocolDecoderException {
228 int matchCount = ctx.getMatchCount();
229
230 // Try to find a match
231 int oldPos = in.position();
232 int oldLimit = in.limit();
233
234 while (in.hasRemaining()) {
235 byte b = in.get();
236 boolean matched = false;
237
238 switch (b) {
239 case '\r':
240 // Might be Mac, but we don't auto-detect Mac EOL
241 // to avoid confusion.
242 matchCount++;
243 break;
244
245 case '\n':
246 // UNIX
247 matchCount++;
248 matched = true;
249 break;
250
251 default:
252 matchCount = 0;
253 }
254
255 if (matched) {
256 // Found a match.
257 int pos = in.position();
258 in.limit(pos);
259 in.position(oldPos);
260
261 ctx.append(in);
262
263 in.limit(oldLimit);
264 in.position(pos);
265
266 if (ctx.getOverflowPosition() == 0) {
267 IoBuffer buf = ctx.getBuffer();
268 buf.flip();
269 buf.limit(buf.limit() - matchCount);
270
271 try {
272 byte[] data = new byte[buf.limit()];
273 buf.get(data);
274 CharsetDecoder decoder = ctx.getDecoder();
275
276 CharBuffer buffer = decoder.decode(ByteBuffer.wrap(data));
277 String str = new String(buffer.array());
278 writeText(session, str, out);
279 } finally {
280 buf.clear();
281 }
282 } else {
283 int overflowPosition = ctx.getOverflowPosition();
284 ctx.reset();
285 throw new RecoverableProtocolDecoderException("Line is too long: " + overflowPosition);
286 }
287
288 oldPos = pos;
289 matchCount = 0;
290 }
291 }
292
293 // Put remainder to buf.
294 in.position(oldPos);
295 ctx.append(in);
296
297 ctx.setMatchCount(matchCount);
298 }
以及这部分
180 public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
181 Context ctx = getContext(session);
182
183 if (LineDelimiter.AUTO.equals(delimiter)) {
184 decodeAuto(ctx, session, in, out);
185 } else {
186 decodeNormal(ctx, session, in, out);
187 }
188 }
当它填充 IoBuffer 时,它使用新行作为分隔符,因此如果您不添加新行,它将继续等待。还没有测试过,但我确信这就是问题所在。只需尝试发送一个最后换行的字符串。将其转换为字节,看看会发生什么。
如果您想传输数据,则必须使用某种协议(protocol)来设置发送器和接收器将使用的规则,以便设置和结束通信。
关于java - 使用 Socket 发送到 Apache Camel Mina2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20410616/
我有一个NioSocketConnector,并且已经成功获得了IoSession。我可以编写测试消息("abcdef"、"|"、"(asdfb)"、"1234567890" 等)我的“真实”消息错误
我正在使用使用 NioAccepter 的 MINA 实现。 我的任务是与其他 java.net.Socket 框架以及 Apache 的 MINA NIO 框架建立一个基本的 java.net.So
我有一个应用程序,由服务器和客户端两部分组成。 它的工作原理如下: 客户端连接服务器并发送字符串;服务器接收字符串并返回一个ArrayList(通过字符串转换),其中包含10000个元素。 我编写了一
我在使用 apache MINA 时遇到了一个奇怪的问题。我有基于 apache Mina 框架的服务器应用程序。我在服务器端使用 ExecutorFilter 。该应用程序在我的计算机上完美运行,但
我目前正在深入研究 Apache MINA。这是一个很棒的框架,具有很多功能。到目前为止最难的部分是解码器部分。检查api文档我了解到有以下类可以扩展和实现自己的类: DemushingProtoco
我在这个链接 http://www.techbrainwave.com/?p=912 上找到了一些代码其中描述了如何使用 apache mina 设置客户端服务器架构。但是,在提供的示例中,它只是单向
我有一个基于 Apache Mina 2.0.4 的应用程序,其中我使用 ExecutorFilter 在 message_received 事件上创建线程。 我发现在生产环境中,在某些时候Execu
我一直在使用 Apache Mina 开发我的第一个基于 TCP/Socket 的应用程序,它看起来很棒而且很容易做。我只想在这里问一个关于 Mina 的问题。 服务器强加 5 秒的空闲时间将终止套接
现在我有一个使用Mina的java应用程序,当socket连接到服务器时,我认为这个java应用程序是正常的,否则是异常的。简而言之,我使用套接字长连接实现应用程序状态监视器。问题是如何使用 Mina
我正在制作一个需要客户端-服务器消息传递的应用程序。我决定使用 MINA。服务器工作得很好(读取消息、触发事件并写入响应,如日志中所示),但客户端似乎没有触发任何事件。它记录发送的消息、接收的字节,但
我基于apache mina 2.0.4构建了一个tcp服务器,并且在写回客户端时遇到了一些问题。 我们有一些 tcp 客户端一次只能处理一条消息,缓冲区大小最大为 256 字节。当我向客户端发送 2
我的 MINA 客户端有一个小问题。 我只创建一个到服务器的连接,然后服务器每秒定期发送某种数据。 简而言之,客户端连接到服务器;服务器向客户端发送回一个字符串,并且所有这些步骤都使用相同的打开的连接
我正在使用 mina gem 进行部署。我必须通过网关才能连接到我的服务器。我知道 capistrano 启用它。 有谁知道mina中的这个配置吗? 最佳答案 我不认为 mina 支持这个;当然,th
我有一个使用 MINA 版本 2 的服务器设置。我对套接字和 tcp 没有太多经验。 问题是如果我连接到我的服务器,然后拔下我的互联网并关闭连接,(服务器没有收到连接关闭的通知)服务器将永远认为我的连
第一次使用 Ruby on Rails 应用程序尝试 Mina,但在以 root 用户身份部署时,它似乎没有看到 Bundler。 我正在使用 Digital Ocean 作为远程服务器。 如果我以相
我正在尝试关注 Apache MINA 的 guide用于设置 SSHD 服务器,但在使用 PuTTY 连接到它时遇到问题。我开始输入用户名,但随后收到以下错误消息: 下面是我的服务器的代码。我是否必
我正在使用 mina 部署部署 Rails 4 应用程序。我的部署脚本是 require 'mina/bundler' require 'mina/rails' require 'mina/git'
有没有办法通过 Mina 部署 repo 的子目录?我见过人们使用自定义部署策略通过 Capistrano 实现这一目标,我希望能够通过 Mina 实现这一目标。 最佳答案 请查看此存储库,https
我有一个 mina 客户端,它的连接器是 NioSocketConnector。我已经用真实服务器编写了这个客户端的集成测试。但是,我找不到方法做 单元测试 .例如,我想在不打开真正的套接字的情况下测
我正在使用 Apache Mina 构建我自己的 SFTP 服务器。我想在每次文件传输完成后自动通知服务器。请在这个方向上帮助我一些指示。 理想情况下,应该有一个我需要实现的接口(interface)
我是一名优秀的程序员,十分优秀!