问题Java的SSL解决,见下文......用的BufferedWriter和二进制数据
我目前正在开发一个服务器 - 客户端应用程序。
服务器使用openssl在C/C++中编程,客户端使用SSLSocket类在android-java中编程。
要写入SSL套接字(客户端),我使用BufferefWriter。 我想这是主要的问题,但我对我的问题或替代品的研究是成功的不是......
这是我如何将数据写入套接字:
BufferedWriter out = new BufferedWriter(new PrintWriter(socket.getOutputStream(), true));
// This was a typo char[] data = new byte[] {0,0,0,255};
char[] data = new char[] {0,0,0,255};
out.write(data);
现在服务器临危0,0,195,191
而这真让我困惑!
但我想这是由于BufferedWriter的工作方式。
那么,我可以做什么,以发送二进制数据到SSL套接字?
BufferedWriter有什么替代方案?
谢谢你的时间!
解决
好感谢麦克道尔和robermann我发现下面的sollution:
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
byte[] data = new byte[] {0,0,0,255};
out.write(data);
我不知道有关Java的工作与字符的方式,因而是一种困惑。
有关在java中使用chars的方式的更多信息,请看下面的McDowell的答案。
感谢所有你们! :d
你为什么困惑?无论如何,你可以写一个ByteArrayOutputStream – robermann
这不会编译:'char [] data = new byte [] ...' - 更正你的代码。请记住,_char_的宽度为16位,_PrintWriter_正在执行从UTF-16到平台编码的转码操作。 Java _char_更像是_wchar_t_; Java _byte_是一个宽度与C _char_相同的8位类型。 – McDowell
@ Ch33f也许你期望在服务器上看到加密的数据? – robermann