Avatar billede the-gnu.dk Nybegynder
04. oktober 2007 - 10:40 Der er 1 løsning

Data går tabt under netværkskommunikation

Jeg har en server og en klient. Klienten sender nogle forespørgsler til serveren, som svarer. Desværre går der noget data tabt under overførslen. Måske nogen kan hjælpe mig?

Jeg bruger følgende 2 metoder:

        public void SendObject(object response) {
            Console.WriteLine("Send: " + response);
            byte[] encryptedData = Serialize(response);
            int size = encryptedData.Length;
            byte[] byteSize = BitConverter.GetBytes(size);

            networkstream.Write(byteSize, 0, 4);
            networkstream.Write(encryptedData, 0, encryptedData.Length);
            networkstream.Flush();
        }

        public object ReadObject() {
            byte[] data = new byte[4];
            this.networkstream.Read(data, 0, 4);
            int size = BitConverter.ToInt32(data, 0);

            MemoryStream ms = new MemoryStream();

            int received = 0;
            byte[] buffer = new byte[1024];
            while(received < size) {
                int bytesRead = this.networkstream.Read(buffer, 0, buffer.Length);
                ms.Write(buffer, 0, bytesRead);
                received += bytesRead;
            }

            ms.Flush();
            ms.Position = 0;
            byte[] obj = ms.ToArray();
            object response = Deserialize(obj);

            Console.WriteLine("Read: " + response);

            return response;
        }

Kommunikationen udskriver følgende:

Send: Module: 2 CommandID: 9
Send: Module: 2 CommandID: 1
Read: Module: 2 CommandID: 9
Read: Module: 2 CommandID: 1
Send: Module: 1 CommandID: 1
Send: 0 4 {0} {0} {0}
Read: Module: 1 CommandID: 1
Send: Module: 1 CommandID: 6
Read: 1 9 {1} {0} {1}

Server:

Read: Module: 2 CommandID: 9
Send: Module: 2 CommandID: 9
Read: Module: 2 CommandID: 1
Send: Module: 2 CommandID: 1
Read: Module: 1 CommandID: 1
Send: Module: 1 CommandID: 1
Read: 0 4 {0} {0} {0}
Send: 1 9 {1} {0} {1}

Som der kan ses, når M:1 CID: 6 ikke igennem til serveren.
Avatar billede the-gnu.dk Nybegynder
09. oktober 2007 - 10:47 #1
Fejlen ligger i at læse tingene ind i MemoryStream... Den er måske ikke hurtig nok?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester