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

ID: Q152058


The information in this article applies to:


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


  1. 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 


  2. 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, 32
          bt = vta
          CopyMemory mt, bt(1), 32
          Debug.Print mt.i; ","; mt.l; ","; mt.s; ","; mt.d
       End Sub 


  3. 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(32) As Byte
          Dim vtdata As Variant
          CopyMemory bt(1), mt, 32
          vtdata = bt
          TCP1.SendData vtdata
       End Sub 



Keywords          : kbnetwork kbAPI kbSDKPlatform kbVBp400 kbWinsock kbGrpNet 
Version           : 
Platform          : 
Issue type        : 

Last Reviewed: March 10, 1999