How do I send binary data over the network using VB?
All properties of ActiveX controls are Unicode, with 16 bit wide characters, on the other side TCP/IP specifications are for byte streams.
The new version of IPWorks toolkit provides byte-array properties for all data sending properties such as DataToSend, EOL etc. The names of these byte array properties are derived from the base property by appending a 'B' such as DataToSendB, EOLB etc.
An example of use would be:
Dim A(0:5) as Byte 'remember to dim explicitly "0 to len-1" For i=0 to 5 a(i) = chr(127+i) next i IPPort1.DataToSendB = A
A similar problem arises when receiving data. In that case there's ONLY ONE byte-array property called DataIn
Private Sub IPDaemon1_DataIn(ConnectionId As Integer, Text As String, EOL As Boolean) ' the Text parameter contains the received data which, sometimes, ' may have been converted incorrectly -- especially in Unicode environments. ' the DataInB property has always the correct bytes. Dim A() As Variant ' get the array's value when you first enter the event. -- VERY Important with IPDaemon A = IPDaemon1.DataInTextB 'only now you may manipulate it ... Debug.Print Text For I = LBound(A) To UBound(A) Debug.Print A(I) Next I End Sub
We appreciate your feedback. If you have any questions, comments, or suggestions about this article please contact our support team at kb@nsoftware.com.