A发送,B接收,
A程序:Byte[] aaa=new Byte[64];
然后发送aaa,0,aaa.length,就是发送了个长度为bbb.length的数据包,不是64?B程序:Byte[] bbb=new Byte[20],
循环读入bbb:
下面分情况:如果aaa.length<20,bbb就是接收aaa.length字节的数据?还是继续等待aaa下次的发送直到填满20个字节?如果aaa.length>20呢?bbb就读20个字节的数据,剩下的字节保存在B程序的缓存里?下一次的循环就是把缓存里的字节放入bbb?,如果aaa继续发送了数据包就继续等待?请各位解答在下的疑惑……

解决方案 »

  1.   

    第三行是 "长度为aaa.length的数据包",打错
      

  2.   

    A发送,B接收,
    A程序:Byte[] aaa=new Byte[64];
    然后发送aaa,0,aaa.length,就是发送了个长度为bbb.length的数据包,不是64?
    肯定是发送64个字节,因为发送的是从0到aaa.length,而aaa.length就是64B程序:Byte[] bbb=new Byte[20],
    循环读入bbb:
    下面分情况:如果aaa.length<20,bbb就是接收aaa.length字节的数据?还是继续等待aaa下次的发送直到填满20个字节?
    继续等待aaa下次的发送直到填满20个字节,如果你有结束字符的判断那又另当别论。如果aaa.length>20呢?bbb就读20个字节的数据,剩下的字节保存在B程序的缓存里?下一次的循环就是把缓存里的字节放入bbb?,如果aaa继续发送了数据包就继续等待?
    aaa.length>20,剩下的字节就丢失了,不会保存。
      

  3.   

    a:
    并不是发送64个字节,因为aaa.length的长度取决于程序的赋值
    byte[] a = new byte[64];
    a = System.Text.Encoding.ASCII.GetBytes("aaaaaaaaa");
    Console.WriteLine("{0}", a.Length);
    b:
    同意