
I heard, from somewhere on StackOverflow, that Windows Remote Desktop doesn't send screen bitmaps, but actual drawing commands. Microsoft Windows Remote Desktop apparently goes one step higher than VNC. And they use something called the RFB protocol. At their best, they use a mirror driver like DFMirage. VNCs use poll-based hooks for detecting screen change and brute force screen capturing/comparing at their worst.

Think about how robust TeamViewer's screen-transfer solution must be to accomplish all this. Scrolling code vertically in Visual Studio has 50 ms lag time. I can browse the web just a few milliseconds slower than on my laptop. I ran a tree command on Command Prompt and it updated with 20 ms delay. Not quite sure about CrossLoop, LogMeIn - I haven't used them, but TeamViewer is insanely fast. It's just as slow as VNC (btw, I don't use the VNC protocol, just a custom amateur protocol).įrom the slowest remote desktop software to the fastest, the list usually begins at all VNC-like implementations, then climbs up to Microsoft Windows Remote Desktop.and then.TeamViewer. Things are looking pretty good, but it's not fast enough. Then I compress the screen region as a PNG and send it off from the server to my client. Regarding screen transfer/sharing, thanks to the mirror driver, I'm automatically notified of changed screen regions and I can simply marshal the mirror driver's ever-changing screen bitmap to my own bitmap.

I've gotten through basic obstacles: I have a robust UDP messaging system, relatively clean program design, I've got a mirror driver (the free DFMirage mirror driver from DemoForge) up and running, and I've implemented NAT traversal for all NAT types except Symmetric NATs (present in corporate firewall situations). I'm developing a remote desktop software (just for fun) in C# 4.0 for Windows Vista/7. Sorry about the length, it's kinda necessary.
