Avatar billede lyhr007 Nybegynder
02. august 2001 - 05:47 Der er 18 kommentarer og
1 løsning

JAVA og UDP

Jeg skal bruge følgende UDP connection til en server:

********************************
The sending packet contains a 4 byte header. All 4 bytes should be FF hex.

The body of the packet is a single null terminated string starting at the 5th byte.
ex. \"info\"
********************************

Herefter for jeg følgende response:

********************************
The received packet from the server also contains the 4 byte header (FF hex).  These 4 bytes can be disregarded.  After that it contains a single character describing the contents of the packet (this is the 5th byte just in case you can\'t count).  I guess you could argue that the 5th byte isn\'t a character and is just a byte value, but everything I read on the web compared it to a character. :-P  Below lists the contents of each type of packet AFTER the first 5 bytes.

ex. of 5th byte:
\"C\"
contains the data in the order listed:
Server IP and Port - Null Terminated String
Server Name - Null Terminated String
Current Map - Null Terminated String
Game Dir - Null Terminated String
Mod Name - Null Terminated String
Current Num Players - Single Byte Integer
Max Num Players - Single Byte Integer
********************************


500 point til en heldig person som ved mere om UDP end jeg gør ;)

PS. Der hvor jeg gik i stå var med header og body af UDP packet....kunne ikke lige se hvordan man gjorde dette i JAVA.
Avatar billede erikjacobsen Ekspert
02. august 2001 - 08:19 #1
Hvad har du allerede - det lyder jo nemt nok hvis du allerede har kode til at
sende og modtage pakker.
Avatar billede disky Nybegynder
02. august 2001 - 08:55 #2
fortæl lidt mere, og vis din kode.
Avatar billede erikjacobsen Ekspert
02. august 2001 - 09:08 #3
Ja, det er jo et svar han kan bruge til noget :))
Avatar billede disky Nybegynder
02. august 2001 - 09:09 #4
???

Har du fået kaffe i den gale hals ?

Om man vælger kommentar eller svar har ingen betydning
Avatar billede erikjacobsen Ekspert
02. august 2001 - 09:12 #5
Rend og hop: jeg tror - men kan jo ikke vide det - at
du vælger svar, så han \"kommer til\" at give dig point
ved et uheld. Der er de 2 muligheder, og et svar skal
man absolut kun give, hvis man mener det hjælper
spørgeren. Det du skriver kan han jo ikke bruge til
en disse.
Avatar billede disky Nybegynder
02. august 2001 - 09:13 #6
nej jeg vælger normalt svar, fordi jeg flere gange ikke har fået point pga, jeg glemte at vælge et svar.

Og han kan da bestemt bruge det til noget, for han skal levere mere information end han har gjort for at kunne få hjælp.

Men tro du bare hvad du vil, i don\'t care.
Avatar billede delbing Nybegynder
02. august 2001 - 10:54 #7

Avatar billede agermose Nybegynder
02. august 2001 - 12:28 #8
Nu er vi vist på vej væk fra det, det drejer sig om, men personlig vil jeg nu også sige at der er grænser for hvad man skal trykke ind som svar - disky. Et andet godt eksempel er dit arbejde for at få point på:

http://www.eksperten.dk/spm/94134

min mening: STOP DET!
Avatar billede disky Nybegynder
02. august 2001 - 12:31 #9
agermose:

Hvad pokker ævler du om ?

Vi lever i et frit samfund og jeg kan derfor selv bestemme om jeg trykker svar eller kommentar !

Og hvad din mening er rager mig et vist sted.

I det spørgsmål regner jeg slet ikke med at få point, jeg havde nemlig ikke tid til at strikke et eksempel sammen, som kunne demonstrere den funktionalitet som var påkrævet. Men det gjorde du, og derfor er det selvfølgelig dig der skal have point for det.
Men hvis du gad og følge lidt med, ville du se at jeg tit kommer med eksempler, ikke kun brydstykker men oftes hele programmer der kan demonstrere det der skal vises. !
Ha og dette er også et svar !
Avatar billede disky Nybegynder
02. august 2001 - 13:03 #10
lyhr:

hvis du ønsker hjælp bliver du NØD til at komme med mere data.


Og en lille hilsen til agermose, se det er kun en kommentar, er du nu glad ?
Avatar billede lyhr007 Nybegynder
02. august 2001 - 13:06 #11
Det kode jeg har er følgende....

  public void getUdpData () throws IOException {

    DatagramSocket socket = new DatagramSocket();

    byte[] buf = new byte[256];
    InetAddress address = InetAddress.getByName(\"hlcs.gameland.dk\");
    DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 27045);
    socket.send(packet);

    packet = new DatagramPacket(buf, buf.length);
    //socket.receive(packet);

    //String received = new String(packet.getData());
    //System.out.println(\"Response: \" + received);

    socket.close();

  }

De linjer der er komenteret ud er for at få programmet til at køre...ellers står det og venter på en udp pakke som aldrig kommer, jeg laver senere noget tråd programmering som gør at der kommer en timeout på....

anyways....det der står for oven skal stadig overholdes....altså med at sende FF osv. ellers for man ingen svar...
Avatar billede erikjacobsen Ekspert
02. august 2001 - 13:10 #12
Jamen, er det ikke bare at putte 255 ind i de første 4 bytes i buf,
derefter så mange tegn som du skal have, f.eks. i de næste 4 \"info\",
og så et stort flot 0. Så har du lavet afsenderpakken med header og
body
Avatar billede disky Nybegynder
02. august 2001 - 13:12 #13
Nu er jeg ikke lige i nærheden af min dokumentation.

Men et vildt gæt.

Efter du har sendt noget, prøv at socket.close();
Og hav en anden socket klar til samme server som du så lytter på.

Måske er det noget med at alt ikke bliver flushet ud på socket ??

Men som sagt det er et vildt gæt.

Hov, er der overhovedet noget i den buffer du sender ?
Du skal hvist fylde noget i din buf først.
prøv med:
buf[0]=255;
buf[1]=255;
buf[2]=255;
buf[3]=255;
buf[4]=\'i\';
buf[5]=\'n\';
buf[6]=\'f\';
buf[7]=\'o\';
buf[8]=0;

indsæt dette ligefør din socket.send();

Prøv det før mit andet forslag :)
Avatar billede lyhr007 Nybegynder
02. august 2001 - 16:10 #14
Det går oxo meget fint ud over at JAVA\'s Byte går fra -127 - 128, så man kan ikke have værdien 255 i den.
Avatar billede disky Nybegynder
02. august 2001 - 16:13 #15
så bare skriv -1 det er det samme
Avatar billede delbing Nybegynder
02. august 2001 - 16:17 #16
Det er et definitionsspørgsmål. java kan udnytte alle de 256 mulige bitmønstre i en byte. java fortolker dem vha 2 komplement, mens andre måske fortolker det som heltal fra 0-255. Tænk på det som en kilometertæller. Når den står på 0 og du triller 1 tilbage, får du det højeste tal der kan stå. På samme måde svarer -1 i 2 komplement til 255 i heltal, -2 til 254 osv.
Avatar billede lyhr007 Nybegynder
02. august 2001 - 16:20 #17
nåh prøvede mig lidt frem....værdien -1 giver Hex værdien FF i JAVA....so far so good....så skal jeg bare have parset mit response buffer...
Avatar billede lyhr007 Nybegynder
02. august 2001 - 16:21 #18
nåh der var nogen der var hurtigere end mig ;)
Avatar billede erikjacobsen Ekspert
02. august 2001 - 21:54 #19
Så tager du igen bufferen byte for byte - dvs. spring de 4 første over...

Hvis jeg læser det korrekt er det 5. tegn (dvs nummer 4) sommetider et
\'C\'. Så kommer der en streng, og det betyder at du skal læse tegn indtil
du møder et flot 0. Det gør du for hver af de null-terminerede strenge.
Efter den sidste af disse - vi ved ikke i hvilken position, da strengene kan
variere i længde - kommer der én byte med ét tal og yderligere én byte
med ét tal. Lur mig om disse ikke også går fra 0 til 255 .... Men de er
i hvert fald nemme.

Såååh, tror du ikke du kan skrive de par stumper kode selv ?? :)
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