Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
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?
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?
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
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
)
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:

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;
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
Tack.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)
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;
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.
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
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.
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
Jajjamen, förstod att det var server istället för host när jag läste i källkoden.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.
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?
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
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)
samt
Så ser du iaf att du inte låser dig i nån loop, vilket vore djävligt underligt...
edit: output för mig
typ: (i server.c)
Kod: Markera allt
/* Huvudloopen */
while (iterations < numberIterations)
{
(void) gettimeofday (&before, NULL);
printf("loop iteration %d\n",iterations);
/* SNIP */
Kod: Markera allt
for (i = 0; i < numberIterations; i++)
{
printf("räknar\n");
variance = (*timeUsec[i] - medel);
*timeVariance[i] = variance * variance;
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.
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
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
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
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
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
SV: Bandbreddsmätare från Datormagazin som knappt fungerar? Källkod
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.
Jag tackar så mycket för hjälpen men just detta projekt lägger jag ner.