Personally, I haven't ever run across a requirement to separate successive calls into discrete packets. However, other experience with the WinSock control leads me to offer this suggestion: after each SendData invocation, put in a "DoEvents" command like so:
Winsock1.SendData "String1"
DoEvents
Winsock1.SendData "String2"
DoEvents
In other instances of using WinSock methods, I've used this technique to give the outer (invisible to VB) message loop time to finish processing all the socket messages enough to complete discrete messages. You may have to do something similar on the Accept side (in between GetData calls) but that's just a guess.
I don't know if this will work (I haven't tested it) but it's a small change, and it's something to try as a science experiment. If it works, great, and we've all learned something. If not, I don't really have another suggestion (sorry).
Good luck!