2014-09-25 42 views
0

我想从我的Java TCP-Client发送TCPMessage到我的Visual Basic服务器。将字符串从Java发送到.NET BinaryReader.ReadString

服务器使用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。

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

+0

你不能仅仅使用Java的.NET二进制序列化,这是我所看到的主要问题。是否有任何理由试图使用BinaryReader? – 2014-09-25 23:11:42

+0

这是一个可以处理断开连接的客户端的异步服务器示例。 我一直在自己的服务器上处理断开连接或重新连接的问题,它总是崩溃。 但是这个样本我找到了工作,现在我已经添加了一些更多的代码,这就是为什么我不想再次从头开始的原因。 而我从中得到样本的人使用二进制阅读器来管理它。 我已经解决了将数据从java客户端发送到VB服务器的问题。 现在我试图找出如何避免使用bufferedreader.readline方法从VB服务器接收数据。 更多请参阅下面的评论 – mademyday 2014-09-25 23:38:21

+0

恐怕你对.net文档的解释是错误的。看到这[其他答案](http://stackoverflow.com/q/19710688/697630)。 – 2014-09-26 00:05:03

回答

0

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

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

+0

啊好吧,我真的很感谢你的帮助队友! 我现在通过使用写入功能2次。 第一:写邮件的长度 第二:写邮件本身 现在我有最后一个问题: 当我从我的VB服务器发送数据时,它必须以.NET常量vbCrlf(\ n)在Java中。 我怎样才能设法做到这一点没有vbCrlf? 问题是我需要区分不同的客户端,才能向Java客户端发送+ Vbcrlf和正常的VB客户端消息。 – mademyday 2014-09-25 23:15:13

+0

到目前为止,我尝试这样,但似乎没有收到:/。 int value = 0; ((value = br.read())!= -1) //将int转换为字符 // { char c =(char)value; //将int转换为字符 //打印字符 System.out.println(c); } – mademyday 2014-09-25 23:23:19

+0

我编辑了我的答案。顺便说一下,你刚才给出的代码只是从Java读取数据。我以为你打算只从Java发送数据? – 2014-09-25 23:31:11