Salve, ho dei grossissimi problemi di trasmissione-ricezione file, i codici sono questi:
la trasmissione è gestita in un thread separato, il codice della ricezione è:codice:Private Sub FileThread() If DEMO = False And BloccoLan = False Then Dim PercorsoPrivato As String = PercorsoFileTX Dim IpPrivatoDestrinatario As String = IpDestinatarioFile Dim DimMaxBuffer As Integer Thread.Sleep(Rnd() * 10) Dim pingResult As Boolean = False Dim FileAperto = False Dim Reader As FileStream = Nothing Do If TxFileBusy = False Then Exit Do End If Loop Do While FileAperto = False Try TxFileBusy = True Reader = New IO.FileStream(PercorsoPrivato, FileMode.Open) FileAperto = True Catch ex As Exception FileAperto = False TxFileBusy = False End Try Loop If FileAperto = True Then Try pingResult = My.Computer.Network.Ping(IpPrivatoDestrinatario) Catch pingResult = False End Try Dim Sizez As Int64 = FileLen(PercorsoFileTX) If pingResult = True Then Try Dim NetFile As NetworkStream Dim Client As New TcpClient(IpPrivatoDestrinatario, 8003) NetFile = Client.GetStream If Client.Connected = True Then Dim ByteFile(4096) As Byte If Sizez > 4096 Then For Block As Int64 = 0 To Sizez Step 4096 'Invoke(New StatoRXTX(AddressOf Me.RXTXSTATO), "TX File..") If Sizez - Block >= 4096 Then Reader.Read(ByteFile, 0, 4096) DimMaxBuffer = 4096 Else Reader.Read(ByteFile, 0, Sizez - Block) DimMaxBuffer = Sizez - Block End If Try NetFile.Write(ByteFile, 0, DimMaxBuffer) Sizez = Sizez Catch ex As Exception ex = ex Exit For End Try Next End If Else pingResult = pingResult End If Client.Close() Catch ex As Exception ex = ex End Try End If Reader.Close() 'Invoke(New StatoRXTX(AddressOf Me.RXTXSTATO), "END TX File..") TxFileBusy = False End If End If End Sub
il problema macroscopico è che il file ricevuto o non è completo o è a dimensione 0, raramente è completo! apparentemente il file viene trasmesso tutto e completamente, ogni tanto da problemi di disconnessione del computer host!codice:Public Sub LeggidatiFile() 'SOCKET 8003 Ricezione File If DEMO = False And BloccoLan = False Then 'Dim sok As TcpClient = Me.SocketFile Dim netstream As NetworkStream = SocketFile.GetStream Dim percorso As String = PersorsoFileRX Dim Stream As FileStream = Nothing Dim FileAperto As Boolean = False Dim Indice As Int64 = 0 Dim bytes(4096) As Byte Do While FileAperto = False If TxFileBusy = False Then Try Stream = New IO.FileStream(percorso, IO.FileMode.Create) FileAperto = True Catch ex As Exception FileAperto = False Exit Do End Try End If Loop If FileAperto = True Then Do 'If SocketFile.Available Then If netstream.DataAvailable Then TtXRrrX.Text = "RX File.." Dim N As Integer = netstream.Read(bytes, 0, 4096) Stream.Write(bytes, 0, N) Indice += N Thread.Sleep(25) Else 'SocketFile.Close() If DimensioneFileRicervere <> Indice Then DimensioneFileRicervere = 0 TxLanToMittente("801#" & NomeFileRX & "#" & Comunicazione.MioIP, IpMittenteFile) End If SocketFile.Close() Stream.Close() FineRicezioneFile = True 'If DimensioneFileRicervere <> Indice Then 'TxLanToMittente("801#" & PersorsoFileRX & "#" & Comunicazione.MioIP, IpMittenteFile) 'eventuale test sulla dimensione del file ricevuto, problemi di loop non definito dove!!!! 'End If PersorsoFileRX = "" percorso = "" DimensioneFileRicervere = 0 TtXRrrX.Text = "END RX File.." Exit Do End If Loop End If End If End Sub
sto davvero impazzendo e il sistema è tutt'altro che stabile!
Scusate dimenticavo, i file sono di dimensione variabile, da pochi byte a qualche Mb. sopratutto file xml. I flussi sono tra pc, tx-rx in base ad handshake esterni.
spero che qualcuno possa essermi d'aiuto
grazie Simone

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando