可以看作是在单线程中,因为用的socket是这个线程所独有的。流程是这样,在一个线程中,从一个socket中读数据,然后用AES加密,然后从另一个socket发出去,这个过程不断循环。我在write前加了一个Sleep,让它等待十几二十毫秒,问题就不出现了。我猜是缓冲的问题,但如果是缓冲的问题,在把加密这部分去掉后,问题更应该出现才对,可实际上去掉加密的步骤后反而没有问题。

解决方案 »

  1.   

    确实奇怪,刚开始还以为是加密时产生了流结束符之类的符号,但sleep后又没事,就搞不懂了
      

  2.   

    在里面加一个try --catch块,看是什么异常,不要在方法声明的时候把异常抛出去了。加密后的密文一般都会比明文要大一些的。
      

  3.   

    发消息还是块儿大一点好这样每次都flush的确容易出问题
      

  4.   

    在里面加一个try --catch块,看是什么异常,不要在方法声明的时候把异常抛出去了。加密后的密文一般都会比明文要大一些的。
    哈哈,好办法呀
      

  5.   

    把pdu用getBytes方式拆成byte[]合并到header里面去试试看,这样就可以一次性发送了
      

  6.   

    在这个方法外catch了这里抛出的异常,java.net.SocketException: Socket closed,这应该是连接断开后,这个方法还在write造成的。另外,在接收那端,接收的recv函数报了WSAECONNRESET错。我把pdu和header合并了,问题还会出现。
      

  7.   

    为什么一定是write的问题呢,如果接收的时候出错后,关闭socket,也是这种现象
      

  8.   

    哦,错了,这样不会报WSAECONNRESET,应该是write一端主动关闭了socket
      

  9.   

    狂顶!  我以前也遇到类似问题!   后来搞定了!  请enoeht跟我联系