Update: UltraVNC 1.4.3.6 and UltraVNC SC 1.4.3.6: https://forum.uvnc.com/viewtopic.php?t=37885
Important: Please update to latest version before to create a reply, a topic or an issue: https://forum.uvnc.com/viewtopic.php?t=37864

Join us on social networks and share our announcements:
- Website: https://uvnc.com/
- GitHub: https://github.com/ultravnc
- Mastodon: https://mastodon.social/@ultravnc
- Facebook: https://www.facebook.com/ultravnc1
- X/Twitter: https://x.com/ultravnc1
- Reddit community: https://www.reddit.com/r/ultravnc
- OpenHub: https://openhub.net/p/ultravnc

Can UltraVNC handle partial messages?

Developers may discuss here
Post Reply
vnc_novice
Posts: 2
Joined: 2015-12-02 17:28

Can UltraVNC handle partial messages?

Post by vnc_novice »

I implemented my own RFB server and everything is working fine on the Windows desktop. When using the implementation on Windows CE, which has a send buffer limitation of about 16k, the UltraVNC client either displays nothing at all or only something which apperars to be the first rectangle in the FrameBufferUpdate message.
The socket function 'send' splits the full FrameBufferUpdate message into submessages. Can UltraVNC handle this? If not, what could I do?
vnc_novice
Posts: 2
Joined: 2015-12-02 17:28

Re: Can UltraVNC handle partial messages?

Post by vnc_novice »

Did some more research and found out the following:
UltraVNC can handle partial messages provided they are properly sliced. This means that you can send the FrameBufferUpdate message header including the number of rectangles to follow in the first message and then each rectangle it its own message. By this you can update the whole screen provided each one of the rectangles fits into the send buffer.
User avatar
Rudi De Vos
Admin & Developer
Admin & Developer
Posts: 6863
Joined: 2004-04-23 10:21
Contact:

Re: Can UltraVNC handle partial messages?

Post by Rudi De Vos »

while ( recv_size<required_size)
size=recv();
recv_size=recv_size+size
)
The viewer or server call the recv() multiple times

The same for sending, just loop until all data has been sended, this is indepened on the actual sendbuffer,
with a small sendbuffer you just send it in smaller packets.
while ( send_size<required_size)
size=send()
send_size=send_size+size;


Wifi split data in small packets, so split and combine is part of the tcp protocol.
On server/viewer you keep repeating send recv until all data has been handled.
Post Reply