Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Här diskuteras programmering och utveckling
Användarvisningsbild
rancor
Inlägg: 1649
Blev medlem: 18 maj 2006, 23:33
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av rancor »

Hej.

Jag kompilerade denna kod:
http://www.datormagazin.se/multimedia/a ... 06007a.zip

Allt gick bra förutom att jag fick lägga till "#include <stdio.h>" i client.c för att lyckas kompilera och då fick jag inga varningar.

Hur som helst. Förutom att jag nog tycker att programmet verkar rätt värdelöst och ej genomtänkt så behöver jag tyvärr få det att fungera då jag behöver mäta prestanda i en embedded-miljö (ELDK) som kör en PPC-processor. Jag kan INGET om C men jag gillar att testa mig fram och ofta får jag saker att fungera som att t.ex. korskompilera programvaran för rätt processor. Programmet startar och jag ser med tcpdump att data skickas mellan klient och server fast jag får inga mätvärden i slutet och därför misstänker jag att något inte fungerar.

Finns det något snille på C här som har lust att hjälpa mig få koden att fungera?
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av Okänd »

i slutet av både clienten och servern så kör dom free på varibeln host, detta är djävligt dumt eftersom i getopt så pekar dom om host till skyddad buffer som det blir väldigt mycket tråkigheter om man frigör den (vilket händer i programmet :P )


Sedan om man inte anger någon ip-adress med -s x.x.x.x flaggan så kommer programmet inte att funka eftersom isf skickas en oiniterad buffer som argument till inet_aton (3)

Så efter att jag tog bort free(host) på slutet så slutade skiten att kracha.


btw det är servern som skriver ut resultatet.

Den här snutten är ganska rolig:

Kod: Markera allt

/* Close and end everything */
  close (newSockFd);
  close (sockFd);
  fclose (stdout); 
  free(host);   // <--- fel!
  free(timeUsec);
  free(timeVariance);
  fprintf (stdout, "closed and errors printed \n"); // varför skulle man villja skriva på stdout när man har stängt stdout????
  exit (0);


  return 0;
Användarvisningsbild
rancor
Inlägg: 1649
Blev medlem: 18 maj 2006, 23:33
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av rancor »

gasol skrev: i slutet av både clienten och servern så kör dom free på varibeln host, detta är djävligt dumt eftersom i getopt så pekar dom om host till skyddad buffer som det blir väldigt mycket tråkigheter om man frigör den (vilket händer i programmet :P )


Sedan om man inte anger någon ip-adress med -s x.x.x.x flaggan så kommer programmet inte att funka eftersom isf skickas en oiniterad buffer som argument till inet_aton (3)

Så efter att jag tog bort free(host) på slutet så slutade skiten att kracha.


btw det är servern som skriver ut resultatet.

Den här snutten är ganska rolig:

Kod: Markera allt

/* Close and end everything */
  close (newSockFd);
  close (sockFd);
  fclose (stdout); 
  free(host);   // <--- fel!
  free(timeUsec);
  free(timeVariance);
  fprintf (stdout, "closed and errors printed \n"); // varför skulle man villja skriva på stdout när man har stängt stdout????
  exit (0);


  return 0;
Tack.

Så jag tar bara bort "free(host);".. skall bli spännande att testa

Fast jag tar nog bort även den sista fprintf för det känns inte så bra att medvetet göra saker som inte fungerar.
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av Okänd »

på servern tror jag den variabeln hette server istället för host, du kan ju ser där, dom är väldigt lika, sedan så skickar programmet paket som är 1MB stora, och om du inte anger hur många paket som ska skickas så skickas 10st, beroende på vilken lina du har så kanske det går lite segt,  och när du ska kompilera server så måste du skicka med -lm till gcc eftersom server länkar mot math biblioteket.
Användarvisningsbild
rancor
Inlägg: 1649
Blev medlem: 18 maj 2006, 23:33
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av rancor »

gasol skrev: på servern tror jag den variabeln hette server istället för host, du kan ju ser där, dom är väldigt lika, sedan så skickar programmet paket som är 1MB stora, och om du inte anger hur många paket som ska skickas så skickas 10st, beroende på vilken lina du har så kanske det går lite segt,  och när du ska kompilera server så måste du skicka med -lm till gcc eftersom server länkar mot math biblioteket.
Jajjamen, förstod att det var server istället för host när jag läste i källkoden.

Jag kör i lanet för att testa till att börja med så det går fort att överföra informationen.

Tyvärr stannar den efter att data är överfört. Blir aldrig mer än det som står här under.

jory01@jory01-laptop:~/Documents/bandbreddsmatare/i386$ ./server -s 192.168.10.22 -n 10

Startar en ny bandbreddsmatning.
Server IP-adress:      192.168.10.22
Matunderlag i paket:    10.
Klienten har adressen: 192.168.10.1


Klienten ger endast följande data
# ./client -s 192.168.10.22
Ansluten till server.


Bara om du orkar, tror du att du misstänker vad som kan gå fel efter att informationen har skickats?
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av Okänd »

hmmm den körde klart för mig när jag tog bort free(host/server) alltså att jag får ut statestik. För att testa vad som går fel så kan du ju slänga in lite printf()-satser i looparna samt efter huvudlopen

typ: (i server.c)

Kod: Markera allt

/* Huvudloopen */
  while (iterations < numberIterations)
    {
      (void) gettimeofday (&before, NULL);
      printf("loop iteration %d\n",iterations);
/* SNIP */

samt

Kod: Markera allt



 for (i = 0; i < numberIterations; i++)
    {
      printf("räknar\n");
      variance = (*timeUsec[i] - medel);
      *timeVariance[i] = variance * variance;

Så ser du iaf att du inte låser dig i nån loop, vilket vore djävligt underligt...



edit: output för mig

Kod: Markera allt

> ./server -s 0.0.0.0
Startar en ny bandbreddsmatning.
Server IP-adress:       0.0.0.0
Klienten har adressen: 127.0.0.1

Medeltid for 1MB:       106262.796875 usec (after 10 runs)

Standard avvikelse:     19375.037109
Slutgiltigt Resultat:   0.1823

Tillganglig bandbredd:   75.29 bit/s

Kod: Markera allt


> ./client -s 0.0.0.0
Ansluten till server.
Avslutar programmet - matning fardig.
Senast redigerad av 1 gasol, redigerad totalt 7 gånger.
Användarvisningsbild
rancor
Inlägg: 1649
Blev medlem: 18 maj 2006, 23:33
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av rancor »

Jösses. Den blev klar efter 100 år.

Startar en ny bandbreddsmatning.
Server IP-adress:      192.168.10.22
Matunderlag i paket:    10.
Klienten har adressen: 192.168.10.1

Medeltid for 1MB:      11227618.000000 usec (after 10 runs)

Standard avvikelse:    487166.343750
Slutgiltigt Resultat:  0.0434

Tillganglig bandbredd:  0.71 bit/s


Inte så jätteimponerande för att vara i ett 100Mbit LAN på samma switch
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av Okänd »

meh jag fick ju 75.29 bit/s på loop backen, men bandbreddstesten är ju rätt så CP också, jag menare blir ju CP mkt overhead om man skickar 1MB över TCP/IP
Användarvisningsbild
rancor
Inlägg: 1649
Blev medlem: 18 maj 2006, 23:33
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod

Inlägg av rancor »

Näh, den är helt klart trasig. Den måste ju räkna på IP-nivå och inte användardata.

Jag tackar så mycket för hjälpen men just detta projekt lägger jag ner.
Skriv svar

Återgå till "Programmering och webbdesign"