code_junkie

NetworkStream.Write returns immediately - how can I tell when it has finished sending data?

Nov 10th, 2011
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.70 KB | None | 0 0
  1. bool done;
  2. void SendData(TcpClient tcp, byte[] data)
  3. {
  4. NetworkStream ns = tcp.GetStream();
  5. done = false;
  6. ns.BeginWrite(bytWriteBuffer, 0, data.Length, myWriteCallBack, ns);
  7. while (done == false) Thread.Sleep(10);
  8. }
  9.  
  10. public void myWriteCallBack(IAsyncResult ar)
  11. {
  12. NetworkStream ns = (NetworkStream)ar.AsyncState;
  13. ns.EndWrite(ar);
  14. done = true;
  15. }
  16.  
  17. void SendData(TcpClient tcp, byte[] data) {
  18. NetworkStream ns = tcp.GetStream();
  19. // BUG?: should bytWriteBuffer == data?
  20. IAsyncResult r = ns.BeginWrite(bytWriteBuffer, 0, data.Length, null, null);
  21. r.AsyncWaitHandle.WaitOne();
  22. ns.EndWrite(r);
  23. }
  24.  
  25. ns.Flush()
Add Comment
Please, Sign In to add comment