ciao, grazie per la risposta, la mia situazione è questa, sto passando da un pc(server e uno client) un file xml da 180K, il codice che sto usando ( prendendo spunto dalla guida) è questo:
Sender file:
il ricevente è questo :codice:Private Sub FileThread() Dim PercorsoPrivato As String = PercorsoFileTX Dim IpPrivatoDestrinatario As String = IpDestinatarioFile Thread.Sleep(Rnd() * 10) Dim pingResult As Boolean = False Try pingResult = My.Computer.Network.Ping(IpPrivatoDestrinatario) Catch pingResult = False End Try Dim Reader As New IO.FileStream("c:\Sched_Termo.sch", FileMode.Open) Dim Sizez As Int64 = FileLen("c:\Sched_Termo.sch") If pingResult = True Then Try Dim Client As New TcpClient(IpPrivatoDestrinatario, 8003) 'Dim Writer As New StreamWriter(Client.GetStream()) Dim NetFile As NetworkStream 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 If Sizez - Block >= 4096 Then Reader.Read(ByteFile, 0, 4096) Else Reader.Read(ByteFile, 0, Sizez - Block) End If NetFile.Write(ByteFile, 0, 4096) Thread.Sleep(10) Next End If End If 'Reader.Close() NetFile.Write(ASCIIEncoding.ASCII.GetBytes("END"), 0, 3) Client.Close() pingResult = pingResult Catch ex As Exception End Try End If Reader.Close() End Sub
con il mio codice ricevo il file ma è inspiegapilmente piu grosso dell'originale e il "END" viene scritto su file e non viso dalla funzione : Dim Msg As String = ASCII.GetString(bytes).codice:Public Sub LeggidatiFile() 'SOCKET 8003 Dim netstream As NetworkStream = SocketFile.GetStream Dim Stream As New IO.FileStream("c:\p1.sch", IO.FileMode.Create) Dim Indice As Int64 = 0 If SocketFile.Connected Then Do While SocketFile.Available Dim bytes(4096) As Byte Dim Msg As String = ASCII.GetString(bytes) If Msg.Contains("END") Then Exit Do End If netstream.Read(bytes, 0, 4096) Stream.Write(bytes, 0, 4096) Indice += 4096 Thread.Sleep(9) Loop SocketFile.Close() End If Stream.Close() Messaggio = Messaggio End Sub
mettendo lo sleep sulla funzione ricevente ricevo 180K, senza si blocca a 4k. il motivo, secondo me, è che il socket diventa non disponibile dopo il primo blocco.
se hai qualche idea su come migliorare il mio codice dimmi pure, sto sclerando da questa mattinaspero di esserti d'aiuto anche per il tuo problema

spero di esserti d'aiuto anche per il tuo problema
Rispondi quotando