【问题标题】:Sending String from Java to .NET BinaryReader.ReadString将字符串从 Java 发送到 .NET BinaryReader.ReadString
【发布时间】:2014-09-25 22:29:37
【问题描述】:

我想从我的 Java TCP 客户端向我的 Visual Basic 服务器发送一个 TCPMessage。

服务器使用 BinaryReader.ReadString() 函数。

http://msdn.microsoft.com/en-US/library/system.io.binaryreader.readstring.aspx

ReadString 函数需要一个 7 位长度的字符串大小前缀。

目前这是我的代码,但服务器无法识别该消息。

public void sendMessage(String message) { 
     if (out != null &&  !out.checkError()) {
         out.print(message.length());
         out.println(message);
         out.flush(); 
     } 
 }

而且我无法更改整个服务器架构以使其识别字符串,例如来自 ReadLine。

希望有人能提供帮助,现在尝试了几个小时。

【问题讨论】:

  • 您不能只将 Java 的二进制序列化与 .NET 一起使用,这是我看到的主要问题。您有什么理由尝试使用 BinaryReader?
  • 这是一个异步服务器示例,可以处理断开连接的客户端。我在自己的服务器上处理断开连接或重新连接时总是遇到问题,它总是崩溃。但是我发现这个示例有效,现在我已经添加了更多代码,这就是我不想从头开始的原因。我从中获得样本的人正在使用二进制阅读器来管理它。我已经解决了将数据从 java 客户端发送到 VB 服务器的问题。现在我试图弄清楚如何使用 bufferedreader.readline 方法从 VB 服务器接收数据。有关更多信息,请参阅下面的 cmets
  • 恐怕您对 .net 文档的解释是错误的。看到这个other answer

标签: java


【解决方案1】:

您的out 可能是PrintWriter,它将数据转换为文本。例如,out.print() 将值的长度写入为字符串,而ReadString 将字符串的长度读取为二进制数据。对于初学者,您需要将out 更改为OutputStream(写入二进制数据)而不是PrintWriter。另一件事是您需要确保Java编写的字符串的字符编码与BinaryReader使用的编码匹配(默认为UTF-8)。另请注意,ReadString 期望字符串的长度以Write7BitEncodedInt method 中所述的特殊格式编码。

最后,ReadString 不希望在字符串末尾出现换行符(println 隐式添加换行符)。

【讨论】:

  • 啊好吧,我真的很感谢你的帮助伙伴!我现在通过两次使用 write 函数来做到这一点。第一:写消息的长度 第二:写消息本身 现在我有最后一个问题:当我从我的 VB 服务器发送数据时,它必须以 Java 中的 .NET 常量 vbCrlf (\n) 结尾。如果没有 vbCrlf,我怎么能做到呢?问题是我需要区分不同的客户端,只向 java 客户端发送 + Vbcrlf 和普通 VB 客户端的消息。
  • 到目前为止,我尝试过这样,但似乎没有收到任何内容:/。整数值=0; // 读取到流的末尾 while((value = br.read()) != -1) { // 将 int 转换为字符 char c = (char)value; // 打印字符 System.out.println(c); }
  • 我已经编辑了我的答案。顺便说一句,您刚刚提供的代码只是从 Java 中读取数据。我以为你打算只从 Java 发送数据?
  • 它正在将数据发送到 VB TCP-Server。现在我需要弄清楚如何在不使用 readline 方法的情况下从服务器接收数据,因为在这种情况下,我总是需要从 VB 发送 vbCrlf 以使 Java 客户端识别答案。请参阅上一篇文章我如何尝试在不使用 Readline 的情况下接收数据。顺便提一句。 "in" 是一个 BufferedReader。
  • 这是一个您没有在此页面中提出的新问题。您应该使用页面顶部的“”链接发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
相关资源
最近更新 更多