Avatar billede casualty Nybegynder
20. januar 2005 - 21:10 Der er 6 kommentarer og
1 løsning

Streaming af bytes.

Jeg har lavet en proxyserver der sender webrequest videre fra browseren og streamer bytes tilbage til browseren:

------------------( RequestHandler.cs )------------------------

NetworkStream netStream = client.GetStream ();
byte[] bytes = new byte[client.ReceiveBufferSize];
netStream.Read (bytes, 0, (int)client.ReceiveBufferSize);

//request fra browseren ex: GET http://www.google.dk/ HTTP/1.0
string data = Encoding.UTF8.GetString(bytes);

//opretter mit eget request objekt
Request request = new Request(data);

//sender requestet videre til den respektive server
TcpClient client2 = new TcpClient(request.Server,request.Port);
NetworkStream stream2 = client2.GetStream();
stream2.Write(bytes,0,bytes.Length);
stream2.Flush();

//modtager bytes fra serveren og
//streamer dem videre til browseren (Skal optimeres)
int i = 0;
int b;
while((b = stream2.ReadByte())!=-1){
  if(b==-1){
    break;
  }
  netStream.Write(new byte[]{(byte)b},0,1);
  i++;
}   
netStream.Flush();

---------------------------------------------------------------

Er der nogen der kan hjælpe mig med at optimere dette:

int i = 0;
int b;
while((b = stream2.ReadByte())!=-1){
  if(b==-1){
    break;
  }
  netStream.Write(new byte[]{(byte)b},0,1);
  i++;
}

Jeg ved at det går langsommere fordi at jeg læser og streamer én byte af gangen.. Jeg kan ikke gennemskue hvorledes jeg evt. skal streame i klumper af f.eks. 1024 bytes af gangen??

Mvh Casualty
Avatar billede casualty Nybegynder
20. januar 2005 - 21:19 #1
Forslag til andre forbedringer modtages også med kyshånd
Avatar billede arne_v Ekspert
20. januar 2005 - 21:19 #2
Prøv noget a la:

byte[] b = new byte[10000];
int n;
while((n = stream2.Read(b, 0, b.Length) > 0)
{
  netSTream.write(b,0, n);
}
Avatar billede casualty Nybegynder
20. januar 2005 - 21:23 #3
Der er en parantes for meget eller for lidt :) Hvor?
Avatar billede arne_v Ekspert
20. januar 2005 - 21:25 #4
while((n = stream2.Read(b, 0, b.Length)) > 0)
Avatar billede arne_v Ekspert
20. januar 2005 - 21:25 #5
og:

netStream.write(b,0, n);
Avatar billede casualty Nybegynder
29. januar 2005 - 17:04 #6
Tak for hjælpen :) Læg et svar...
Avatar billede arne_v Ekspert
29. januar 2005 - 17:07 #7
svar
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