求SOCKET的一个问题
过程如下:
服务器开启监听,客户端链接到服务器,但是服务器不会立刻分配任务给客户来做,可能要过很长时间,但是又不允许服务器与客户端的SOCKET断开,客户端开一个线程向服务器发送心跳数据,服务器也开一个线程接收这个心跳数据,等到服务器向客户端分配任务的时候就关掉这个线程,然后向客户端发送数据,在客户端,收到服务器的数据(服务器如果发给客户端数据就表示要处理的数据),也会停止发送心跳的线程,这个时候客户端停止了心跳包发送线程了,服务器端也停止了接收心跳包的线程了,客户端处理服务器的数据,然后将处理之后的数据发送到服务器,收发心跳包的过程是很稳定的,问题就出现在,在客户端与服务器链接很长时间之后(也就是说客户端向服务器发送了大量的心跳数据),再将处理之后的数据发送到服务器的时候,服务器接收的数据就是心跳数据,而不是要处理的数据,这是为什么呢?之前的心跳数据我已经开了一个线程来接收了啊,为什么还有大量的心跳数据发来呢,(确定发送心跳数据的线程只有一个,而且在接收到服务器的数据之后已经将这个线程关了)
我想这个可能与TCP协议栈有关,关于再深一点东西,我了解的不是很多,还请各位高手指点一二,上面都是项目要求那样做的,所以不要问为什么要那样做而不那样做~~