02. august 2001 - 05:47Der 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.
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.
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å:
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 !
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...
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
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;
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.
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 ?? :)
Synes godt om
Ny brugerNybegynder
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.