Avatar billede Slettet bruger
02. februar 2007 - 10:00 Der er 8 kommentarer og
1 løsning

TCP send vil ikke som jeg..

Hej Eksperter.

Jeg har en send og receive funktion, Jeg ha brug for at sende hash af filen, og størrelen til den der modtager, men det vil ikke som jeg.


////SEND FILE////
//Send hash
Byte[] Hash = Encoding.ASCII.GetBytes(Attrib.Hash);
DataStream.Write(Hash, 0, Hash.Length);

//Send size
Byte[] Size = Encoding.ASCII.GetBytes(fs.Length.ToString());
DataStream.Write(Size, 0, Size.Length);

//Send file
T.Status = Status.Transfering;
int bytessent;
while ((bytessent = reader.Read(Buffer, 0, Buffer.Length)) != 0)
{
  DataStream.Write(Buffer, 0, bytessent);
  T.Transfered += bytessent;
}




////RECEIVE FILE////
S = C.GetStream();

//Get hash
while (true)
{
    Buffer = new Byte[BufferLen];
    S.Read(Buffer, 0, Buffer.Length);
    Hash = Encoding.ASCII.GetString(Buffer).ToString();
    MessageBox.Show("'" + Hash + "'", "Recv");
    break;
}

//Get size
while (true)
{
    Buffer = new Byte[BufferLen];
    S.Read(Buffer, 0, Buffer.Length);
    FileSize = Convert.ToInt64(Encoding.ASCII.GetString(Buffer).ToString());
    MessageBox.Show("'" + FileSize.ToString() + "'", "Recv");
    break;
}

//Receive file
Savepath = Path.Combine(Settings.DLFolder, T.Filename);
fs = new FileStream(Savepath, FileMode.OpenOrCreate);
w = new BinaryWriter(fs);

while (T.Transfered < T.TotalSize)
{
    if (T.Transfered >= T.TotalSize)
        break;

    Buffer = new Byte[BufferLen];
    byteRead = S.Read(Buffer, 0, Buffer.Length);
    w.Write(Buffer, 0, byteRead);
    T.Transfered += byteRead;
}



Problemet er at første gang jeg sender size, så er den rigtig, men med en masse tomme karakterer efter, anden gang er der en masse tilfældige. Hvordan sender jeg size og hash så modtager han læse det, og derefter læse af buffer for at skrive filen?
Avatar billede Slettet bruger
02. februar 2007 - 13:22 #1
slet ingen?
Avatar billede arne_v Ekspert
02. februar 2007 - 15:42 #2
S.Read(Buffer, 0, Buffer.Length);
    FileSize = Convert.ToInt64(Encoding.ASCII.GetString(Buffer).ToString());

duer ikke

du skal bruge antal tegn du faktisk laeser naar du konstruerer din string !
Avatar billede Slettet bruger
02. februar 2007 - 15:44 #3
hvordan ved jeg hvor lang i tegn størrelsen er nåt jeg skal modtage det?
Avatar billede Slettet bruger
02. februar 2007 - 15:45 #4
man kan vel ikke vide hvor meget det fylder?
Avatar billede arne_v Ekspert
02. februar 2007 - 15:47 #5
du skal lige naerlaese doc spaa Read og GetString men jeg gaetter paa at du kan:

int nb = S.Read(Buffer, 0, Buffer.Length);
    FileSize = Convert.ToInt64(Encoding.ASCII.GetString(Buffer, 0, nb).ToString());
Avatar billede arne_v Ekspert
02. februar 2007 - 15:57 #6
.ToString() maa ioevrigt vaere totalt overfloedig
Avatar billede arne_v Ekspert
02. februar 2007 - 16:21 #7
hm - du har ret i at du skal vide hvor mange bytes du skal laese i Read (3. argument)

har du overvejer BinaryWriter/BinaryReader og saa bare WriteInt32/ReadInt32 ?
Avatar billede Slettet bruger
19. marts 2007 - 14:25 #8
smider du lige et svar?:)
Avatar billede arne_v Ekspert
19. marts 2007 - 14:29 #9
ok
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

IT-JOB