سعید جان در کدی که براتون نوشتم شما در حقیقت اطلاعات باینتری فایل تصویر رو به داخل متغیر میبرین. WinSock این قابلیت رو داره که اطلاعات رو به فرمت غیر از String هم دریافت کنه. من در MSDN مطالب متنوعی در این مورد دیدم:
Knowledge Base
HOWTO: Send and Receive UDT's Using the Winsock ControlPSS ID Number: Q152058
Article Last Modified on 11-8-2001
--------------------------------------------------------------------------------
The information in this article applies to:
Microsoft Visual Basic Standard Edition, 32-bit, for Windows 4.0
Microsoft Visual Basic Professional Edition, 32-bit, for Windows 4.0
Microsoft Visual Basic Enterprise Edition, 32-bit, for Windows 4.0
Microsoft Internet ActiveX Controls 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 kbZNotKeyword kbActiveXICSearch kbVB400Search kbVB400 kbActiveXIC
--------------------------------------------------------------------------------
Send feedback to Microsoft
© 2002 Microsoft Corporation. All rights reserved.
و اما کد:
Open "D:\MyPic.jpg" For Binary As #1
Dim str1 As String
str1 = Space(FileLen("D:\MyPic.jpg"))
Get #1, , str1
Close #1
Open "D:\D:\MyNewPic.jpg" For Binary As #1
Put #1, , str1
Close #1
امیدوارم در حد یک سر نخ کوچیک کمکت کنه!
موفق باشین،
امین ثباتی MCSD