当ServerSocket向ClientSocket发送较长数据。用的是SendBuf方法经调试发现ClientSocket的Read事件多次发生,每次只接收8192个字节,(最后一次除外),但是所有的字节数加起来比ServerSocket发送过的的字节数大。这是怎么回事呀?我的程序必须等待所有的数据接收完后才能进行下一步处理,该如何做呀?

解决方案 »

  1.   

    我也遇上了这个问题,应该是发送和接收缓冲区大小的问题,但ServerSocket和ClientSocket都没有设发送和接收缓冲区大小的设置!!!
    在D7中用TidTCPClient和TidTCPServer就可以高缓冲区大小。可以解决这个问题!!!但我又不知TCPServer怎样发数据给TCPClient,郁闷ing!!!!
      

  2.   

    是由于socket.ReceiveLength和实际接收的长度不一致造成的,在计算长度的时候用实际接收长度累加,也就是用socket.ReceiveBuf的返回值计算,不要用socket.ReceiveLength。
      

  3.   

    to kmzym:
    我调试过了,当传输量于于8192字节时,每次传递的字节数socket.ReceiveBuf与socket.ReceiveLength的长度是一样的;
    总值加起来都比实际发送字节要大
    有什么方法让等数据全部接收完后再执行Read事件
      

  4.   

    to cnstudio(菜鸟学编程) 
    socket.ReceiveBuf我用了很多,发送大文件的时候也没有发现你所说的问题。可以载发送的数据大小放在数据头里,接收指定大小的数据。
      

  5.   

    另外要考虑流式socket会出现粘包的情况,这也可能造成接收到的比期待的数据大。