31. august 2003 - 13:46Der er
13 kommentarer og 1 løsning
Sende UDP pakke og modtage svar
Jeg skal have sendt en UDP pakke til en server som så sende en pakke tilbage med en streng. Hvordan ville man lave sådan noget, kender ikke så meget til netværk i java, ved bare at der er mange stream metoder. Indtul nu har jeg strikket dette sammen
DatagramSocket socket = new DatagramSocket(27025);
ByteArrayOutputStream baus = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baus); ps.print("\\xFF\\xFF\\xFF\\xFFinfo\\x00");
byte[] barray = baus.toByteArray();
DatagramPacket packet = new DatagramPacket(barray,barray.length);
Skal du selv lave UDP protokollen eller hvad? Kan du ikke starte med at printe det Bytearray ud som du sender på klient siden og så printe det ud på server siden. Så kan du se om pakken er rigtig sendt. Hvis du skal sende en streng tilbage ville det så ikke være hensigtmæssigt at bruge en mere pålidelig protokol?
Jeg skal bare sende en pakke med dette indhold "\\xFF\\xFF\\xFF\\xFFinfo\\x00" serveren sende så en udp pakke tilbage med en anden streng "bla\nbla\n" Jeg kan ikke se om serveren modtager serveren, kun se om den giver mig svar igen. Det er i forbindelse med counter strike real-time serverinfo.
Hvis jeg sætter socket.setSoTimeout(2000); skriver den
0 java.net.SocketTimeoutException: Receive timed out at java.net.PlainDatagramSocketImpl.receive(Native Method) at java.net.DatagramSocket.receive(DatagramSocket.java:711) at CS.CSInfo.sendPacket(CSInfo.java:26) at CS.CSInfo.main(CSInfo.java:8)
Du er jo nødt til at parse data så du får noget brugbart ud af det.
Hvis du konverterer til en String går der data tabt.
En start kunne være at du kigger på dette:
(Info klassen er bare en opbevaringsklasse - det bør være nemt at se hvordan data parses.
private static void parseInfo(byte data[], Info info) { /* (int32) -1 (byte) ASCII 'C' (info response, S2A_INFO) (string) net address of server (string) name of the host / server (string) name of the map (string) game directory (i.e. valve/) (string) Game description (e.g. "half-life multiplay") (byte) active client count (byte) maximum clients allowed (byte) protocol version (currently 7) */
//net address int x = 5; StringBuffer sb = new StringBuffer(); while(data[x] != 0x00) { sb.append((char)data[x]); x++; } info.setHost(sb.toString()); x++;
//server name sb = new StringBuffer(); while(data[x] != 0x00) { sb.append((char)data[x]); x++; } info.setName(sb.toString()); x++;
//map name sb = new StringBuffer(); while(data[x] != 0x00) { sb.append((char)data[x]); x++; } info.setMap(sb.toString()); x++;
//game dir sb = new StringBuffer(); while(data[x] != 0x00) { sb.append((char)data[x]); x++; } info.setGame(sb.toString()); x++;
Operating System Newline Character(s) Microsoft Windows / MS-DOS 0Dh 0Ah Apple Macintosh OS 9 and earlier 0Dh Unix (e.g., Linux) and Apple OS X 0Ah
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.