Think about it this way. At the most basic level, the data sent is just a load of bits, which is just a load of bytes. Winsock does not attach any sort of "data type" metadata when your data gets put on the wire - the data type thing is a purely artificial thing.

IMO this is poor design from the winsock control, but that's another issue.

Since VB uses BSTR as its string type, strings can have embedded nulls, so a byte array and a string can both be used for getting the data.

Uh, anyway - receive the data in the most convenient form, you can always convert either way (though it's expensive).