我在客户端用clientSocket接收服务端发来的tcp包,每个包有个命令头,用read事件接收,对于短的信息可以一次完全处理,但是长的信息在我的客户端不能一次收到,因为我是按照命令头来处理信息,这样的话我只能处理部分消息,后办部分就没办法处理,而服务端的信息格式我不能改动,有没有什么办法能使一条信息完全到达客户端时才储发read时间或者用什么控件?

解决方案 »

  1.   

    接收处理逻辑:
    1、建立一个全局的循环队列,用来存放接受的报文。
    2、接收的时候,读取所有的数据SocketReceiveBuf(buf,MaxLen),写入到队列。
    3、处理队列,看看队列里是否有完整的数据包(可能有多个,循环处理),有,就处理数据包,没有就返回。/////////////因为ServerSocket的接收消息未必和发送端对应,可能Client连续发送几包数据,Server才产生一次消息,也可能Client发送一次,Server产生多次消息,所以,用上面的逻辑能够安全处理这两种情况。