in the server code, if I take out the MsgBox(FileReader.BaseStream.Length) the client freezes, and the filesize of the transfered file is less then the complete file size. Line 10
here is the server sub
vb Code:
Private Sub SendAFile(ByVal FileName As String, ByVal WhichClient As Integer) 'file path C:\Documents and Settings\Owner\Desktop\Ya Ali - Ringtone.mp3 Dim FileReader As IO.BinaryReader Dim Fs As IO.FileStream Dim LastBytes If File.Exists(FileName) Then Fs = New IO.FileStream(FileName, FileMode.Open) FileReader = New IO.BinaryReader(Fs) SendMessage(FileName & "-|-" & FileReader.BaseStream.Length, "<<SERVER>>", "FileTransfer:", WhichClient) MsgBox(FileReader.BaseStream.Length) SyncLock Clients(WhichClient).DataStream Do While FileReader.BaseStream.Position < FileReader.BaseStream.Length If FileReader.BaseStream.Position + 8 > FileReader.BaseStream.Length Then LastBytes = FileReader.BaseStream.Length - FileReader.BaseStream.Position Else LastBytes = 8 End If Clients(WhichClient).DataStream.Write(FileReader.ReadBytes(LastBytes), 0, LastBytes) Loop End SyncLock FileReader.BaseStream.Dispose() FileReader.Close() Fs.Dispose() Fs.Close() Else MessageBox.Show("The File: " & FileName & " does not exist") End If End Sub
here is the client sub
vb Code:
Private Sub ReceiveAChunk(ByVal MyData As String) 'file path C:\Documents and Settings\Owner\Desktop\Ya Ali - Ringtone.mp3 If MyFileInfo.FileSize = 0 Then Dim TempString() As String TempString = Split(MyData, "-|-") 'MyData current format 'Filename -|- Length MyFileInfo.FileName = TempString(0) MyFileInfo.FileName = Mid(MyFileInfo.FileName, InStrRev(MyFileInfo.FileName, "\")) MyFileInfo.FileName = Application.StartupPath & MyFileInfo.FileName MyFileInfo.FileSize = Val(TempString(1)) MsgBox(MyFileInfo.FileName & vbNewLine & "File Length:" & MyFileInfo.FileSize) MyFileInfo.Transfering = True End If Dim Filewriter As IO.BinaryWriter Dim Fs As IO.FileStream If File.Exists(MyFileInfo.FileName) Then MsgBox("File exists") Else Fs = New IO.FileStream(MyFileInfo.FileName, FileMode.CreateNew) Filewriter = New IO.BinaryWriter(Fs) Dim MyBytes(8) As Byte Dim I As Integer Dim LastBytes As Integer SyncLock MyDataStream For MyFileInfo.BytesReceived = 0 To MyFileInfo.FileSize Step 8 MyDataStream.Read(MyBytes, 0, 8) If MyFileInfo.BytesReceived + 8 > MyFileInfo.FileSize Then LastBytes = MyFileInfo.FileSize - MyFileInfo.BytesReceived Else LastBytes = 8 End If For I = 0 To LastBytes - 1 Step 1 Filewriter.BaseStream.WriteByte(MyBytes(I)) Next Next MsgBox(" I guess were done?") End SyncLock Filewriter.BaseStream.Dispose() Filewriter.Close() Fs.Dispose() Fs.Close() MyFileInfo.Transfering = False End If 'Else 'MessageBox.Show("The File: " & FileName & " does not exist") 'End If End Sub




Reply With Quote