Thema: Delphi Query an Gameserver

Einzelnen Beitrag anzeigen

BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#66

AW: Query an Gameserver

  Alt 24. Feb 2015, 20:28
Der hängt sich immernoch auf wenn ich auf einen falschen Port verbinde.
Habe die Änderungen vorgenommen wie vorgeschlagen:

Delphi-Quellcode:
form4.udp1.RemoteHost:= form4.edit1.Text;
  form4.udp1.RemotePort:= form4.edit2.Text;
  form4.udp1.Open;

  if (form4.udp1.Connected) then
  begin
  form4.Udp1.Send....
end;
Nicht das END hinter SendBuf() sondern ganz ans Ende.

Delphi-Quellcode:

begin
  request.RequestHeader := '˙˙˙˙';
  request.PacketHeader := 'T';
  request.Payload := 'Source Engine Query'; // Von mir aus auch mit einer Konstante oder einem Ressourcestring
  request.Payload[24] := #00;

  form4.udp1.RemoteHost:= form4.edit1.Text;
  form4.udp1.RemotePort:= form4.edit2.Text;
  form4.udp1.Open;

  if (form4.udp1.Connected) then
   begin
    form4.Udp1.SendBuf(request, SizeOf(TInfoRequest));
    form4.Udp1.ReceiveBuf(buffer, SizeOf(buffer));

    i := 0;
    Move(buffer[i], response.ResponseHeader, SizeOf(response.ResponseHeader)); inc(i, SizeOf(response.ResponseHeader));
    Move(buffer[i], response.PacketHeader, SizeOf(response.PacketHeader)); inc(i, SizeOf(response.PacketHeader));
    Move(buffer[i], response.Protocol, SizeOf(response.Protocol)); inc(i, SizeOf(response.Protocol));
    response.Name := GetString(buffer, i);
    response.Map := GetString(buffer, i);
    response.Folder := GetString(buffer, i);
    response.Game := GetString(buffer, i);
    Move(buffer[i], response.ID, SizeOf(response.ID)); inc(i, SizeOf(response.ID));
    Move(buffer[i], response.Players, SizeOf(response.Players)); inc(i, SizeOf(response.Players));
    Move(buffer[i], response.MaxPlayers, SizeOf(response.MaxPlayers)); inc(i, SizeOf(response.MaxPlayers));
    Move(buffer[i], response.Bots, SizeOf(response.Bots)); inc(i, SizeOf(response.Bots));
    Move(buffer[i], response.ServerType, SizeOf(response.ServerType)); inc(i, SizeOf(response.ServerType));
    Move(buffer[i], response.Environment, SizeOf(response.Environment)); inc(i, SizeOf(response.Environment));
    Move(buffer[i], response.Visibility, SizeOf(response.Visibility)); inc(i, SizeOf(response.Visibility));
    Move(buffer[i], response.VAC, SizeOf(response.VAC)); inc(i, SizeOf(response.VAC));
    response.Version := GetString(buffer, i);
    //form4.edit1.Text := response.Name;

  end; //hier hin

end;
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (24. Feb 2015 um 20:34 Uhr)
  Mit Zitat antworten Zitat