C#与java或android进行tcp通信时,注意问题
使用BinaryReader和BinaryWriter时,另一端接收数据要进行处理。
因为C#服务端会先计算传输数据的长度,然后把长度转为byte值插入到传输数据的头部,再进行传输的,对源码进行反射,看源码, 下面传入的value值为传输数据的长度
protected void Write7BitEncodedInt(int value) { uint num = (uint) value; while (num >= 0x80) { this.Write((byte) (num | 0x80)); num = num >> 7; } this.Write((byte) num); }
因此,在android端进行接收时,要先对数据流进行解析时,要分析出它的长度
private final int read7BitEncodedInt() { byte num3; int num = 0; int num2 = 0; try { do { if (num2 == 0x23) { throw new Exception("Format_Bad7BitInt32"); } num3 = (byte)this.read(); num |= (num3 & 0x7f) << num2; num2 += 7; } while ((num3 & 0x80) != 0); } catch(Exception e) { e.printStackTrace(); } return num; }
最后来进行读取,即可得出完整的数据流