HOWTO: Send and Receive UDT's Using the Winsock Control
ID: Q152058
|
The information in this article applies to:
-
Microsoft Visual Basic Standard, Professional, and Enterprise Editions, 32-bit only, 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 kbGrpNet
Version : WINDOWS:1.0,4.0
Platform : WINDOWS
Issue type :
|