Avatar billede anadan Nybegynder
05. august 2005 - 11:23 Der er 3 kommentarer og
1 løsning

Adskillelse af pakker i Socket kommunikation

Jeg laver et program der bruger TCPClient til at sende simple kommandoer. Problemer er at når der modtages på den anden side, bliver nogle af kommandoerne samlet til én. Det sker helt fordi at data bliver sendt for hurtigt. Det virker ikke at flushe. Jeg sender på følgende måde:

byte[] bytes = System.Text.Encoding.Default.GetBytes(message);
client.GetStream().Write(bytes, 0, bytes.Length);

og modtagelsen sker med

try
{
    if(client.GetStream().CanRead)
    {
        byte[] buffer = new byte[client.ReceiveBufferSize];
        builder = new StringBuilder();
        int bytes = 0;
        do
        {
            bytes = client.GetStream().Read(buffer, 0, buffer.Length); 
            builder.Append(Encoding.Default.GetString(buffer, 0, bytes)); 
        }
        while(client.GetStream().DataAvailable);
        string received = builder.ToString();
        return received;
    }
}
catch(Exception e){}
return "";

Eksempel på kommandoer er afsendelse af keystrokes, med deres keyvalue "KEY 32"

Eksempel på fejlkunne være "32KEY 67"

Jeg kunne self. lave en skille karakter, men en af kommandoerne sender meget komplekse data.
Avatar billede arne_v Ekspert
05. august 2005 - 11:51 #1
sockets er stream orienterede

der er ingen garanti for at read vil læse i samme klumper som write har
skrevet dem

hvis det er tekst data så wrap din Stream i en StreamWriter/StreamReader
og brug WriteLine/ReadLine (det er en nem måde at få en skille karakter på)

hvis det er binær data så kan du enten behold Stream og prefixe data med en
længde og læs indtil du har det antal bytes og gem overskydende bytes til
næste læsning eller du kan wrappe Stream i BinaryWriter/BinaryReader
Avatar billede anadan Nybegynder
05. august 2005 - 12:17 #2
Okay, der ser ud til at readline/writeline fungerer til formålet. Det undrer mig bare at den med readline ikke skiller ved \r\n, som jeg sender med i nogle af kommandoerne. Men det er jo bare til min fordel :)
Avatar billede anadan Nybegynder
05. august 2005 - 12:17 #3
Point for svar
Avatar billede arne_v Ekspert
05. august 2005 - 12:20 #4
kommer her
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