Microsoft KB Archive/152058

{|
 * width="100%"|

HOWTO: Send and Receive UDT's Using the Winsock Control

 * }

Q152058

-

The information in this article applies to:


 * Microsoft Visual Basic Standard Edition, 32-bit, for Windows, version 4.0
 * Microsoft Visual Basic Professional Edition, 32-bit, for Windows, version 4.0
 * Microsoft Visual Basic Enterprise Edition, 32-bit, for Windows, version 4.0
 * Microsoft Internet ActiveX Controls, version 1.0

-

SUMMARY
The Winsock control methods SendData and GetData send and receive data through an argument declared of type variant. The following variant types are supported:

  Byte        vbByte Integer    vbInteger Long       vbLong Single     vbSingle Double     vbDouble Currency   vbCurrency Date       vbDate Boolean    vbBoolean SCODE      vbError String     vbString Byte Array vbArray + vbByte Because user-defined types are not directly supported, you must make use of the byte-array data type in order to pass a user-defined type with the Winsock control. This article demonstrates how to send and receive data contained in a user-defined type with the Winsock Control.

MORE INFORMATION
The example uses the Winsock TCP client and server created in the following Microsoft Knowledge Base article:

"Q152057 HOWTO: Create & Use a Client/Server Using Winsock TCP Controls" Prior to following this example, make sure you have at least built the framework for the client and server discussed in the aforementioned article. You will be required to make modifications to the DataArrival Event subroutine and the SendData Command subroutine.

Step by Step Example
  Enter the following code in the General declarations section of Form1 of both the client and server:

  Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (_          hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

Private Type MyType i As Integer l As Long s As String * 8 d As Double End Type   Enter the following code for the DataArrival Event subroutine in the Winsock server:

  Private Sub TCP1_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim vta Dim mt As MyType Dim bt As Byte TCP1(Index).GetData vta, vbArray + vbByte, LenB(mt) bt = vta CopyMemory mt, bt(0), LenB(mt) Debug.Print mt.i; ","; mt.l; ","; mt.s; ","; mt.d     End Sub   Enter the following code for the SendData Command button in the Winsock client:   Private Sub cmdSendData_Click Dim mt As MyType mt.i = 99 mt.l = 33 mt.s = "abcd" mt.d = 23.76 Dim bt As Byte ReDim bt(LenB(mt)) as Byte Dim vtdata As Variant CopyMemory bt(0), mt, LenB(mt) vtdata = bt        TCP1.SendData vtdata End Sub 

Additional query words:

Keywords : kbnetwork kbAPI kbSDKPlatform kbVBp400 kbWinsock kbGrpDSNet

Issue type :

Technology : kbVBSearch kbAudDeveloper kbActiveXICSearch kbVB400Search kbVB400 kbActiveXIC