TServerSocket中,onclientread的时候,是必须一次把数据全部读入吗?
Tserversocket中,当收到客户端的数据的时候,是一次将数据取出,然后存入自己的缓冲区,还是先读取包头,等数据够了再接收包体的数据呢?
我是按照先读取包体长度,然后再接收包体的数据的做法,逻辑上没问题,但是实际上在操作中,运行一段时间,客户端sendbuf的时候就返回-1,然后,服务器端就不触发onclientread事件了
[解决办法]
TCP 是按字节流传输的,所以数据有可能不是一次全部到达的,所以接收时不能假设一下子能全部接收完,同样的道理,也可能是一次接收了两段数据,需要进行拆分。
如果不按上述原则处理,有可能在服务端收到不完整的数据就进行处理,造成业务中断。
[解决办法]
这需要两端指定通讯协议,而且每次发包的长度应该作为一个信息发给你,你按长度读取