LostOblivion Skrevet 25. april 2009 Del Skrevet 25. april 2009 Hei, Driver å lager et lite filoverføringsprogram med .NET og C#, og bruker XmlSerializer til å sende filinformasjon før selve fildata blir sendt. Jeg har en løsning hvor en server tjener en fil, og klienter kobler seg til og laster ned denne filen. Problemet er at jeg får en "There is an error in XML document (5, 14)" exception hos klienten. (5, 14) refererer til slutten av XML-markupen den sender på Stream-en. Feilen skjer ikke hvis servern ikke sender noe fildata etter den har sendt hdr på outstream med Serialize og klienten ikke prøver å lese mer fra instream etter Deserialize. Jeg skjønner ikke hva som skaper feilen. Noen som har vært borti dette før? Legger ved litt eksempelkode som gjør omtrent det samme som selve koden min. /* FileHeader. */ class FileHeader { public string filename; public long filesize; } /* Server. */ XmlSerializer ser = new XmlSerializer(typeof(FileHeader)); const int BufSize = 1024; byte[] buf = new byte[BufSize]; FileHeader hdr = new FileHeader(); Stream instream, outstream; TcpClient client; hdr.filename = "Jodel.txt"; hdr.filesize = 533; outstream = client.GetStream(); /* Her er client tilkoblet. */ ser.Serialize(outstream, hdr); instream = new FileStream("Jodel.txt", FileMode.Open); while (instream.Position < instream.Length) { var num_bytes = instream.Read(buf, 0, BufSize); outstream.Write(buf, 0, num_bytes); } instream.Close(); client.Close(); /* Klient. */ XmlSerializer ser = new XmlSerializer(typeof(FileHeader)); const int BufSize = 1024; byte[] buf = new byte[BufSize]; FileHeader hdr; Stream instream, outstream; TcpClient client; instream = client.GetStream(); /* Her er client tilkoblet. */ hdr = (FileHeader)ser.Deserialize(instream); outstream = new FileStream(hdr.filename, FileMode.Create); while (outstream.Position < hdr.filesize) { var num_bytes = instream.Read(buf, 0, BufSize); outstream.Write(buf, 0, num_bytes); } outstream.Close(); instream.Close(); Lenke til kommentar
LostOblivion Skrevet 26. april 2009 Forfatter Del Skrevet 26. april 2009 Fant problemet. Forandret - /* FileHeader. */ class FileHeader { public string filename; public long filesize; } til /* FileHeader. */ [Serializable] public class FileHeader { public string filename; public long filesize; } og så byttet jeg ut XmlSerializer med BinaryFormatter. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå