問題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