请教一下大家,我用SOCKET进行网络编程时,在异步模式下,使用的BeginReceive函数,如下。本来是想接收端接收到数据就马上反应,但是为什么会有延迟呢?总是等到接收到一定数据量的数据才有反应。
public IAsyncResult BeginReceive(
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
AsyncCallback callback,
Object state
)是不是size的问题?发送端间隔50ms发100个字节,接收方size大于100,每次读出来的字节数都大于100.
有没办法发送端50ms发100个字节,接收方接收完100个字节,就能直接读出来呢?

解决方案 »

  1.   

    TCP流,就像管道里的水一样,是没有分段的。因此分段要自己做。解决分包问题: 可以先写包长度,再发包;相应的一方读包长度后,再拆包。
    解决及时发送问题: 设TcpClient.LingerState。
      

  2.   

    Server 的 Socket可以使用 BeginAccept,然后使用信号量等待,再BeginAccept的Callback 给发一个信号让Socket 再接收数据。
    这个就应该可以解决你的问题了。
      

  3.   

    我有用分包,我的意思并不是他们结合在一起,不能分离。
    我的意思是能不能服务器一起接受到数据,就马上报告上层,可以读出来处理了!用NO_DELAY设置好像不行!