小弟用Java做了一个模拟握手的协议,利用Socket来传输,其中双方都利用了BigInteger这个大数类进行了模幂计算,但是在对中间结果进行传输以及再次计算的时候出现了客户端和服务器端不相同的情况。简单来说就是客户端有个大数c,服务器有个大数s,双方互发一下,都计算c乘s,通过socket的readLine和pringln传输的c和s,双方计算的c乘s不相等,我搜索了一下相关的帖子,看到了这里的一个朋友也问了类似的问题,有朋友解答说“readLine在读到一个字符串后,通过println发出去,会在最后加上一个\r\s,而这个死符串本身可能就在末尾,也就没有\r\n,或者只有\n”还有朋友解答说“socket传输的都是byte流,你按照一定长度来读取byte流,再组合就可以了。”“先读取10个byte,然后组成String,trim一下,然后用long txtLen=Long.parseLong得到long值。这个就是下面内容的长度。在byte buf[]=new byte[txtLen];is.read(buf);String txt=new String(buf);这样就得到完整的text了。”我最后对c乘s进行了DES加解密,出现了Input length must be multiple of 8 when decrypting with padded cipher的报错,估计也是传输过程中出现的问题。那么怎么做能保证传输的准确呢?恳请各位前辈指点一下!小弟是个新手,希望能解释的具体一些,非常感谢!
用ObjectInputStream和ObjectPutputStream
服务器端用的是BufferedReader和PrintWriter
开始就是传输一些小信息,模拟测试一下,没考虑到后来能传大的数值,是这个原因么??