Avatar billede Slettet bruger
14. februar 2007 - 09:35 Der er 3 kommentarer og
1 løsning

Fylde buffer med data

Hey eksperter

Jeg har et program hvor jeg skal sende en fil til en anden client. Den der skal sende filen connecter til clienten der skal modtage. Efter connect, skal den sende først filstørrelse i bytes, og derefter en hash af filen og så derefter begynde at sende fil data.

Mit problem er så, at jeg først skal læse filstørrelse og derefter hash før jeg skriver data til filen. Da clienten der modtager ikke ved hvor står filstørrelse og hash er, bliver jeg nød til at sende det som fx 256 bytes, og så med en karakter der siger stop.

Derfor skal jeg altså sende 256 bytes, med hvor den self starter med filstørrelse. Så hvis filstørrelse fylder 10 karakterer, så skal resten (246) være tomme, hvordan gør jeg det?
Avatar billede skov_p Praktikant
14. februar 2007 - 20:16 #1
Hvis du lader dit byte[] indeholde null der hvor der ikke er data kan du måske noget i retningen

foreach(byte b in fileBytes){
if(null!=b){
...
}
}
Avatar billede arne_v Ekspert
15. februar 2007 - 04:18 #2
hvis du sender tekst:

størelse<CR><LF>
hash<CR><LF>
linie 1<CR><LF>
linie 2<CR><LF>
...

hvis du sender binary:

8 byte med størrelse
16 byte med hash
N bytes med fil

du kan også bruge din valgte metode og bare sende 246 bytes med værdien 0 og så
trimme dem i den anden ende, men det synes jeg da er alt for besværligt
Avatar billede Slettet bruger
15. februar 2007 - 12:37 #3
Jeg løste det selv således:

//Send hash
Byte[] Hash = GetOptByte(Attrib.Hash);
DataStream.Write(Hash, 0, Hash.Length);


//Get hash
while (true)
{
      byte[] BHash = new byte[50];
      S.Read(BHash, 0, BHash.Length);
      string SHash = Encoding.ASCII.GetString(BHash);
      Hash = SHash.Remove(SHash.IndexOf("#"));
      break;
}



private byte[] GetOptByte(object Attrib)
{
    string Data = (string)Attrib;
    byte[] Buf = new byte[50];

    for (int i = 0; i < Buf.Length; i++)
    {
          Buf[i] = (byte)'#';
    }

    for (int i = 0; i < Data.Length; i++)
    {
          Buf[i] = (byte)Data[i];
    }

    return Buf;
}


Det virker som en drøm :) Ikke den bedste metode måske, men den er simpel, let at forstå og virker som den skal :)
Avatar billede Slettet bruger
19. marts 2007 - 14:24 #4
lukker
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