Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C#] Problema perdita dati TCP

    Ho un problemino, ho scritto un programma che invia un file (diviso in pacchetti) da un host ad un altro via TCP (porta 500 aperta e testata), i pacchetti che invio hanno una dimensione compresa tra 16534 e 16538 bytes, il problema è che metà dei pacchetti arriva danneggiata con una dimensione costante di 3472

    Il codice vorrei postarlo ma è troppo lungo!

    Qualcuno ha un'idea generica del motivo di tutti questi errori di trasmissione??

  2. #2
    Non ha senso ora tutti i pacchetti arrivano danneggiati a 3472Kb oppure 10452Kb è come se la connessione di invio si chiudesse prima di finire upload
    avete qualche idea?

  3. #3
    fai un test con dei pacchetti piu piccloli, tipo 8192, perchè guardando nelle proprietà dei socket, quando blocco il programma il buffersize default è posto a 8192

  4. #4
    ho messo il buffer dei socket sia per la ricezione che per l'invio a 24Kb ma mooolti pacchetti arrivano con soli 10416Kb

    Qualche idea?

  5. #5
    Facendo delle prove ho scoperto che il Socket client (TcpClient) in un caso ha letto solo 6944Kb ma nella proprieta' Aviable c'è il valore 9588 6944 + 9588 = 16532Kb!! esattamente i Kb inviati

    ma come mai ne legge solo 6944 ?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Guarda ... il TCP non c'entra nulla.

    E' sicuramente un problema del tuo codice che, se non si vede, non si può dire dove sia sbagliato.

    Ho capito che è grande ma senza vederlo non si può fare nulla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    ho lo stesso problema allora io invio cosi dal client:
    codice:
                Dim buffer() As Byte
                If NetMsg.CanWrite Then 'Invia la richiesta per il download del file
                    Dim msg As String = "GetDownloadFile C:\"
                    buffer = ASCII.GetBytes(msg)
                    NetMsg.Write(buffer, 0, buffer.Length)
                End If
    e dal server leggo:
    codice:
                   If Msg.IndexOf("GetDownloadFile ") >= 0 Then
                    Dim filePath As String = Replace(Msg, "GetDownloadFile ", "")
    
                    Msgbox Path.GetFileName(filePath) '<----errore
                    End If
    Solo che ottengo un errore che dice che il percorso del file non è corretto

    Qualcuno capisce perchè? Grazie!
    jabjoint

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da jabjoint
    ho lo stesso problema allora io invio cosi dal client:
    codice:
                Dim buffer() As Byte
                If NetMsg.CanWrite Then 'Invia la richiesta per il download del file
                    Dim msg As String = "GetDownloadFile C:\"
                    buffer = ASCII.GetBytes(msg)
                    NetMsg.Write(buffer, 0, buffer.Length)
                End If
    e dal server leggo:
    codice:
                   If Msg.IndexOf("GetDownloadFile ") >= 0 Then
                    Dim filePath As String = Replace(Msg, "GetDownloadFile ", "")
    
                    Msgbox Path.GetFileName(filePath) '<----errore
                    End If
    Solo che ottengo un errore che dice che il percorso del file non è corretto

    Qualcuno capisce perchè? Grazie!
    Scusa ... ma cosa c'entra con il thread attuale?

    Se mischiamo le discussioni non si capisce più nulla ...

    Adesso si risponde a te o all'altro problema (che hanno solo in comune l'argomento ...) ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Ho notato che il codice così non funziona (leggo solo una parte del pacchetto):

    Codice PHP:
    NetworkStream Stream Client.GetStream();
    nBytesRead Stream.Read(BytesRead0BytesRead.Length); // ByteRead non completo !!! 
    invece se inserisco una pausa funziona...:

    Codice PHP:
    NetworkStream Stream Client.GetStream();
    Thread.Sleep(150);
    nBytesRead Stream.Read(BytesRead0BytesRead.Length); // ByteRead completo !!! 
    Credo sia perchè senza pausa il programma legge il NetworkStream ancora incompleto inquanto non ha avuto il tempo di scaricare per intero il paccheto; credo

    conoscete un metodo per sapere quando un NetworkStream è pronto alla lettura?? ho fatto alcuni test con NetworkStream.DataAvaiable ma non funziona, da True e False in modo indipendente e apparentemente illogico...

  10. #10
    ok apro un nuovo post!
    jabjoint

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.