Avatar billede dsj Nybegynder
26. marts 2002 - 21:21 Der er 17 kommentarer og
1 løsning

Læsning af byte[]

Jeg har et lille problem. Jeg modtager efter forespørgsel (indeholdende "ping") en DatagramPacket fra en given server, som jeg kører en getData() på - dette returnerer et byte[].

Følgende ved jeg om byte-arrayet:
"ping"
    Server responds with a single byte code ASCII 'j'

Jeg ved ikke hvad der menes, andet end at der på index 4 i byte[] står et 'j', hvorefter ping'en til serveren er returneret.

Hvilken kode skal der til for at hive denne ping ud af byte[]???
Avatar billede jakoba Nybegynder
26. marts 2002 - 21:49 #1
byte[] bArr = pingQuest( ... );
  // du modtager respons i variablen bArr der er
  // et array af bytes.

if ( bArr[4] == 'j' ) {
    // ping returneret ok
} else {
    // ping ikke returneret
}

men hvad der returneres når dit ping fejler ved jeg ikke. det kunne være bArr får værdien null istedet.
Avatar billede dsj Nybegynder
26. marts 2002 - 21:56 #2
Det ser meget godt ud, men hvordan hiver jeg ping UD ? Altså hvis ping er rigtigt returneret, hvilken kode skal der så til for at jeg havner med en int eller String med den aktuelle ping der er til serveren??
Avatar billede jakoba Nybegynder
26. marts 2002 - 22:03 #3
Desværre, jeg forstår ikke dit spørgsmål. ping er en handling, ikke en 'ting'.
Avatar billede dsj Nybegynder
26. marts 2002 - 22:27 #4
1. Jeg sender en kommando (String) afsted til serveren: "ping".
2. Serveren returnerer et byte[].
3. I dette byte[] har serveren lagt et tal for, hvor hurtig svartiden er til den selv.

Dette tal vil ved jeg ikke, hvordan jeg får fat i, kun at det eksisterer i det modtagne byte[] et eller andet sted efter 'j'.

Håber det hjalp lidt :)
Avatar billede jakoba Nybegynder
26. marts 2002 - 22:41 #5
joda. Vi kan vel experimentere os frem til det.
find 3 servere.
een tæt på hvor du er. hvis du har en localhost er den ideel som den NÆRE server
een et stykke vej væk, fx i frankrig.
een hulens langt væk, new Zeeland fx.

ping dem alle 3 via OS-kommandolinie og skriv tider og ip adresser ned.

ping dem igen med dit program der laver et bytearray og udskriv arrayet fra j og resten.

Det skulle være rimeligt nemt at finde de 4 (eller måske 8) byte i arrayet der er tiden.

mvh JakobA
Avatar billede dsj Nybegynder
26. marts 2002 - 22:51 #6
En toString på byte[] ser således ud HVER gang:

ÿÿÿÿj0ng0000000000.....(osv)......
Avatar billede jakoba Nybegynder
26. marts 2002 - 23:12 #7
det skal heller ikke være en toString(), men en:
    for (int i=0; i<bArr.length(); i++) {
        int j = bArr[i];
        system.out.print( ","+Integer.toHexString(16) );
    )

det er jo binære data vi leder efter.

og ja, den skal nok blive en ordentlig moppedreng.

mvh JakobA
Avatar billede jakoba Nybegynder
26. marts 2002 - 23:14 #8
pokkers. på det sidste er experten begyndt at submitte før jeg vil.

det er sådanher:
    for (int i=0; i<bArr.length(); i++) {
        system.out.print( ","+Integer.toHexString((int)bArr[i]) );
    }
Avatar billede dsj Nybegynder
26. marts 2002 - 23:26 #9
Hehe, nu giver det lidt mere mening - jeg vidste f.eks. ikke at det var binære tal vi arbejdede med! Nåh nu får vi følgende resultat:

,ffffffff,ffffffff,ffffffff,ffffffff,6a,0,6e,67,0,0,0,0,0,0,0

...men HVER gang.
Avatar billede jakoba Nybegynder
26. marts 2002 - 23:32 #10
og det er hele byte arrayet?
Avatar billede jakoba Nybegynder
26. marts 2002 - 23:35 #11
Hvis det er ens for der 3 forskellige servere har nogen løjet for dig. Så står pingresponstiden slet ikke i det bytearray.
Avatar billede dsj Nybegynder
26. marts 2002 - 23:41 #12
,ffffffff,ffffffff,ffffffff,ffffffff,6a,0,6e,67,0,0,0,0,0,0,0...(osv seføli)...

hmmm, men lad os nu sige, at ovenstående er rigtigt returneret (jeg gør nok noget galt) hvordan får jeg så hevet min ping-time til serveren ud af disse hextal?
Avatar billede jakoba Nybegynder
26. marts 2002 - 23:51 #13
Når engang vi finder ud af hvilke bytes tallet står i kan vi genskabe tallet med

int responstid = ((mestbetydendebyte*256 +næstmestBetydendebyte)*256 +trediemesteBetydende)*256 +mindstBetydende;

men hvis et ping til din localhost returnerer præcis samme bytearray som et ping til stillehavet så står responstiden simpelthen ikke i det array.

Du har checket med dos-kommandoer at serverne findes og giver vidt forskellige responstider ved ping ikke?

mvh JakobA
Avatar billede dsj Nybegynder
26. marts 2002 - 23:53 #14
LOL, der er vist lige gået en prås op for mig. Måske er det meningen man selv skal måle svartiden på den afsendte pakke og at man så ikke skal bruge den modtagede pakke til andet end at måle på!!

Hvordan får jeg en int ud af et byte[]?

Hvis du svarer på det får du dine point (husk at oprette som svar og ikke kommentar)
Avatar billede dsj Nybegynder
26. marts 2002 - 23:58 #15
Tak, det var jo det rigtige svar på at få en int ud af et byte[], og sorry jeg var lidt foran, opret lige et svar hvor du skriver "Så ka du lære det ka du", for jeg lærte faktisk noget af dig :)

mvh DanilJ
Avatar billede dsj Nybegynder
26. marts 2002 - 23:58 #16
DanielJ even
Avatar billede jakoba Nybegynder
27. marts 2002 - 00:03 #17
"Så ka du lære det ka du" :-))
takker
Avatar billede dsj Nybegynder
27. marts 2002 - 00:06 #18
hehe selv takker
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
Kurser inden for grundlæggende programmering

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