为什么我的RMI套接字只发送一个字节?

时间:2015-02-21 14:31:57

标签: java sockets encryption rmi

我在一个项目中工作。我想加密RMI客户端和服务器之间的信息。我正在学习一些像http://da2i.univ-lille1.fr/doc/j2sdk-1.4.2/guide/rmi/socketfactory/index.html这样的教程。它们使用XOR方法加密。

事情还可以。我的意思是,信息被加密和解密没有问题,但是当我使用Wireshark捕获数据包时,它们都具有1个字节的大小。

我已经分析了XorInputStream和XorOutputStream类,改变了读写方法,但我什么也没得到。只有一个字节的数据包。

我认为这可能是一个Socket或ServerSocket类问题,有一些关于套接字缓冲区大小的属性。

我想解决这个问题,因为应用程序使用一百条通信消息只发送几个字。

我试图在流类中修改write方法,寻找缓冲过程,在一个突发中发送4个字节:

byte buf[] = new byte[4];
int i=0;

 public void write(int b) throws IOException {
   if(i<=3){
     buf[i]=(byte)((b ^ pattern) & 0xFF);
     i++;
   }
   else{
        for(int j=0;j<4;j++)
            out.write(buf[j]);
        i=0;
        buf[i]=(byte)((b ^ pattern) & 0xFF);
        i++;
   }
}

但我的程序只发送几个字节并冻结。

这是我的完整项目:

https://mega.co.nz/#!pN0nUZTZ!G35QZxAgeZyzNg5Te8-ZlIjZmNK9wn8-0Cdj19nBOdY

如果有人对这个问题一无所知,那将会非常有帮助。

谢谢你。

1 个答案:

答案 0 :(得分:0)

谢谢你!解决了。必须扩展BufferedOutputStream而不是在自定义输出/输入流类过滤