networkstream naar file

Status
Niet open voor verdere reacties.

EdjeCageman

Gebruiker
Lid geworden
24 okt 2011
Berichten
273
Beste mensies,

ik kom hier totaal niet uit, ik ben bezig met een downloadgedeelte voor een programma, ik wil een bestand van een server downloaden en deze opslaan.
Maar nu kom ik er totaal niet aan uit. Hij maakt het bestand netjes aan, maar hij vult hem niet.

Code:
        public void get(NetworkStream input, int size)
        {
            FileStream stream = new FileStream(@"fietsventiel.txt", FileMode.Create);
            byte[] buffer = new byte[size];
            int bytesRead;
            while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                stream.Write(buffer, 0, bytesRead);
            }
        }

Terwijl een bestand naar de server verzenden wel lukt:
Code:
        public void send(Stream input, long fileSize)
        {
            NetworkStream stream = client.GetStream();
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                stream.Write(buffer, 0, bytesRead);
            }
        }
 
Heb je gecontroleerd of je de "while" uberhaubt wel ingaat door middel van een breakpoint? Indien ja, heb je al geprobeerd een "flush" te forceren voordat je de routine verlaat?
 
Ja hij komt de while in, loopt 1x er doorheen en hangt daar als het ware.
En flush in de while stoppen? Met flush ben ik toch de data uit de stream kwijt??? Of heb ik het verkeerd?
 
Nee een flush schrijft alle data die nog in de buffer is weg. Normaal gesproken zou je flush niet bij elke actie nodig horen te hebben, maar sommige streams zijn wat vervelend.

kijk ook met je breakpoint eventueel of je de data in de buffer herkent.
 
Ja dat bedoelde ik ook, in ieder geval. Als ik een klein textbestand ophaal dan schrijft hij hem wel weg. Maar als ik een groter bestand doe dan blijft hij hangen.

while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
stream.Write(buffer, 0, bytesRead);
stream.Flush();
}
 
Het is moeilijk om zoiets te debuggen op afstand. Stuurt de andere kant van de connectie wel een juiste termination als die klaar is? Een van de redenen dat je mogelijk vast komt te zitten met deze methode is als de socket open wordt gehouden. In dat geval termineert je loop niet.

Ik weet niet welke buffersize je nu gebruikt, maar probeer die onder de 1000 te houden. Er zijn zoveel varianten en overloads van de networkstream dat ik zelf ook af en toe de weg kwijt ben
 
Het was inderdaad de server die niet het complete bestand verstuurde. Hij kon wel overweg met kleinere Tekstbestanden, maar bij de grotere bestanden stuurde hij maar een klein gedeelte.

Tnx :)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan