 Sasha_karasov » 29.03.2005 (Вт) 7:59
 Sasha_karasov » 29.03.2005 (Вт) 7:59 
			
			Я мне нужно передать  файл через winsock, но у меня медленно копирует файлы.
Может поможете мне разобраться почему медленно копирует. Смотрел исходники  подобные тотже алгоритм но копирует намного быстрей. Кстати по форуму искал не нашел.  
Вот код может сразу и скажите:
Ниже множите скачать. 
CLIENT:
‘IP – TextBox
‘Port - TextBox
‘Command1 – это connect
‘Command2 - SendFile
‘Text2 – пут к файлу
‘WS – Winsock
--------вот код клиента -----------------------
Dim PaketWait As Boolean
Dim t As String
Dim i As Long
Dim OK As Boolean
Private Sub Command2_Click()
Send_File
End Sub
Private Sub Form_Load()
PaketWait = False
IP.Text = ws.LocalIP
End Sub
Private Sub Command1_Click()
ws.Close
ws.RemoteHost = IP
ws.RemotePort = Port
ws.Connect
End Sub
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
ws.GetData Data
If Data = "+OK" Then OK = True
End Sub
Private Sub ws_SendComplete()
PaketWait = True
End Sub
Public Function Send_File() As Boolean
Send_File = False
Dim s As String
Dim l
Dim SF As String
l = FileLen(Text2.Text)
PaketWait = False
ws.SendData "FINFO" & l
Do While PaketWait = False
DoEvents
Loop
PaketWait = False
Open Text2.Text For Binary As #1
    s = String(2048, vbNullChar)
    Dim tmp As String
    Do Until EOF(1)
        DoEvents ' Даже если это убрать тоже долго и висит пока не скопирует
        PaketWait = False
        
        Get #1, , s
        ws.SendData s
        
        
        
    Loop
Close #1
Send_File = True
End Function
-----------------------end client---------------------
SEVER
Command2 – Сохранит файл 
Text2 – Куда сохранить 
P – ProgressBar
-------------А вот код-----------------------------
Dim File As String
Dim FS
Dim FSize
Private Sub Command2_Click()
Open Text1.Text For Output As #1
Print #1, File
Close #1
File = ""
End Sub
Private Sub Form_Load()
Me.Show
WS.Close
WS.LocalPort = 100
WS.Listen
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub ws_ConnectionRequest(ByVal requestID As Long)
WS.Close
WS.Accept requestID ' à çà÷åì ýòî ?
End Sub
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
WS.GetData Data
If Mid(Data, 1, 5) = "FINFO" Then
FSize = Int(Mid(Data, 6, Len(Data)))
P.Max = FSize
Exit Sub
End If
FS = FS + Len(Data)
If FS >= FSize Then
    P.Value = P.Max
    MsgBox "FILE +OK"
    Exit Sub
Else
    P.Value = FS
End If
File = File + Data
End Sub
------------------все --------------------
Только не надо говорит что у меня всегда пакеты по 2048 байт, даже если надо отослать <2048 байт, я зная, просто я это потом сделаю.
			
				
					- Вложения
- 
		
			 C&S.zip C&S.zip
- (3.87 Кб) Скачиваний: 59
 
Удачи!
С уважением, Алексадр.