Avatar billede daniboy Nybegynder
01. september 2002 - 19:38 Der er 6 kommentarer og
1 løsning

HL server query

Herunder er hvad SDK2.2 hl protocollen siger om query til en Half-life server...

Game servers will answer the following messages:
Messages are sent to the server by sending 4 consecutive bytes of 255 (32-bit integer -1) and then the string command followed by a zero byte to terminate it

Der er følgende string commands
"ping"
"info"
"players"
"rules"

Så er mit spørgsmål så om følgede kode ikke burde gøre det? (det virker ikke)

    DatagramSocket socket = new DatagramSocket(27005);

    byte[] buf1 = new byte[255];
    byte[] buf2 = new byte[255];
    byte[] buf3 = new byte[255];
    byte[] buf4 = new byte[255];
    byte[] buf5 = new byte['p' + 'i' + 'n' + 'g'];
    byte[] buf6 = new byte[0];
    byte[] buf7 = new byte[512];

    InetAddress server = InetAddress.getByName(args[0]);

    // Sending 1st. packet:
    packet = new DatagramPacket(buf1, buf1.length, server, 27021);
    socket.send(packet);
    // Sending 2nd packet:
    packet = new DatagramPacket(buf2, buf2.length, server, 27021);
    socket.send(packet);
    // Sending 3rd packet:
    packet = new DatagramPacket(buf3, buf3.length, server, 27021);
    socket.send(packet);
    // Sending 4rd packet:
    packet = new DatagramPacket(buf4, buf4.length, server, 27021);
    socket.send(packet);
    // Sending requst packet:
    packet = new DatagramPacket(buf5, buf5.length, server, 27021);
    socket.send(packet);
    // Sending closing packet:
    packet = new DatagramPacket(buf6, buf6.length, server, 27021);
    socket.send(packet);
    System.out.println("Packets send...");
   
    packet = new DatagramPacket(buf7, buf7.length);
    System.out.println("waiting for packet...");
    socket.receive(packet);
    String received = new String("" + packet.getData());
    System.out.println("Server info: " + received);

    System.out.println("Closing...");
    socket.close();
    System.out.println("Closed");

Hvis dette ikke er tilfældet hvad er der så galt og hvordan løser jeg problemet?
Avatar billede dsj Nybegynder
01. september 2002 - 19:57 #1
byte[] query = { -1, -1, -1, -1, 'd', 'e', 't', 'a', 'i', 'l', 's', 0};
    byte[] respond = new byte[256];

    DatagramSocket socket = new DatagramSocket();
    socket.setSoTimeout(timeout);
    InetAddress address = InetAddress.getByName(ip);
    DatagramPacket packet = new DatagramPacket(query, query.length, address, port);
    DatagramPacket packet2 = new DatagramPacket(respond, respond.length, address, s.getPort());

    socket.send(packet);
    socket.receive(packet2);

    byte[] receive = packet2.getData();

Jeg anbefaler, at du anvender "details" i stedet for "info". Der får du flere informationer, og desuden hører "details" til den nye protokol.

Jeg har i øvrigt lavet et launcher-program til Half-Life, som hedder Nida HL Launcher:

http://www.nidaware.com/da/applikationer.php

Der er stadig småfejl som skal rettes, men det er snart færdigt. Men de ting som du efterspørger fungerer i mit program. Tro mig, protokol-informationerne fra Valve er MEGET mangelfulde´

Men spørg bare, jeg ved det meste...
Avatar billede daniboy Nybegynder
01. september 2002 - 20:32 #2
Jeg kigger lige på det men det giver mening ^^^^
Avatar billede daniboy Nybegynder
01. september 2002 - 20:47 #3
I din packet2 definere du at porten er s.getPort()... den port er det ikke den port som dataerne bliver sendt til fra serveren? og hvad er det i HL?
Avatar billede dsj Nybegynder
01. september 2002 - 21:54 #4
Der skulle bare have stået "port", altså den samme port i begge pakker. Den ene pakke sendes og den anden bruges til at modtage, på den måde kan man nøjes med at sende en mindre pakke.

For det meste anvendes port 27015 eller 27010, men det kan i princippet være en hvilken som helst port. Det kommer an på, hvordan serveren er sat op.
Avatar billede daniboy Nybegynder
01. september 2002 - 23:05 #5
Det funker :)
Avatar billede dsj Nybegynder
02. september 2002 - 07:22 #6
Hvis der er andet du vil vide omkring at få informationer fra en HL server må du bare spørge (dj@g-a-f.dk)
Jeg har fået det hele til at virke :)
Avatar billede daniboy Nybegynder
06. september 2002 - 15:31 #7
ok tak :)
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