Gå til innhold

[Løst]Filoverføringsprogram: There is an error in XML document (5, 14)


Anbefalte innlegg

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
Videoannonse
Annonse

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...