17. maj 2006 - 17:24Der er
4 kommentarer og 1 løsning
Detektering af afslutning på xml document igennem socket
Jeg har et dataset som jeg gerne vil sende fra en pc til en anden gennem en TCP socket. Dette kan jeg også gøre med nedenstående kode, hvor afsenderen lukker forbindelse med "close()" når xml dokumentet er sendt. Jeg imidlertid ikke at lukke forbindelsen men bevare denne. Hvis jeg undlader at lukke den, bliver modtageren imidlertid ved med at lytte og bliver hængende i "ReadXml". Hvordan "ReadXML" på modtagersiden ud af at hele xml documentet er kommet frem? Og skal afsenderen eventuelt fortælle dette?
Afsender:
server = new TcpListener(System.Net.IPAddress.Parse("192.168.36.102"), 5454); server.Start(); client = server.AcceptTcpClient(); reader = new StreamReader(client.GetStream()); writer = new StreamWriter(client.GetStream()); (new Thread(new ThreadStart(Reader))).Start(); rdt.WriteXml(writer); writer.Flush(); writer.Close();
Modtager:
DataSet1.MyTable rdt = new DataSet1.MyTable(); rdt.ReadXml(reader);
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
2) send laengden af data inden selve data saa modtager ved naar alt er modtaget
kan du ikke lide #1 maa det jo vaere #2
din kode understoetter ikke #2 umiddelbart, men hvis du skriver til et byte array eller en string, saa kan du sende langden foerst og saa sende data bagefter
Ok, nummer 2 har jeg også overvejet, men hvad er så ideen med WriteXML() når man alligevel skal mellemlagre det hele i en String?
Egentlig burde ReadXML vel sagtens kunne stoppe med at lytte når hele xml-strengen var kommet igennem. Det skulle jo bare lede efter et stop-tag svarende til det første i xml'en. Det er jo ikke nogen stor kunst. hmm.
Hvad med en 3. mulighed: at sende et slut-tag, eks. "<EOF>" som det sidste og så read'e bytevis?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.