Thema: Delphi Gutes TCP Protokoll?

Einzelnen Beitrag anzeigen

Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
508 Beiträge
 
Delphi 11 Alexandria
 
#1

Gutes TCP Protokoll?

  Alt 13. Aug 2014, 01:39
Hallo,
Ich habe ein kleines Spiel das ich nun mit einem MP-Modus ausstatten will und überlege mir gerade ein Protokoll.

Ist es Sinnvoll es einfach so simpel wie möglich zu halten? Also ich denke dabei an befehle wie:
Code:
join lobby main
Code:
set direction 90
Und als antwort vom server einfach ein "ok" bzw. "error eine fehlermeldung".
Also das wären halt ganz simple "konsolenbefehle". Wäre dann halt auch sehr einfach hackbar ohne gewisse gegenmassnahmen aber das lässt sich ja teilweise sichern.

Oder wäre es da schon besser wenn man das ganze komplexer aufbaut und z.b. ganze objekte verschickt?

Ausserdem klappt bei mir die Verbindung nicht wirklich. Ich habe versucht eine einfache Verbindung aufzubauen. Zuerst sende ich einfaches Connect und dann will ich den Namen mit "name blabla" setzen aber die Verbindung wird immer wieder geschlossen und ich weiss einfach nicht wieso. :/

Hier der Code:
Client beim Connecten:
Delphi-Quellcode:
procedure TForm1.Connect;
var
  AMessage : string;
begin
  TCPClient.Disconnect;
  TCPClient.Connect;

  SendMessage('connect');

  if ReceiveMessage = 'welcomethen
  begin
    showmessage('Connected!');
    repeat
      Name := InputBox('CrazyCurve', 'Enter your name:', ''); // Diese box wird noch ausgeführt
      SendMessage('name ' + Name); // Wird laut Log nicht zum server gesendet...
    until (ReceiveMessage = 'ok');
    showmessage('Name ok');
  end;
end;
Server beim Execute:
Delphi-Quellcode:
procedure TForm1.TCPServerExecute(AContext: TIdContext);
var
  AMessage : string;
  Commands : TStringList;
  First : string;
begin
  AMessage := ReceiveMessage(AContext);

  if AMessage = 'connectthen
  begin
    AnswerMessage(AContext, 'welcome');
  end;

  Split(' ', AMessage, Commands);

  if Commands[0] = 'namethen
    AnswerMessage(AContext, 'ok');

end;

Hier noch SendMessage und ReceiveMessage:
Delphi-Quellcode:
function TForm1.ReceiveMessage: string;
begin
  Result := TCPClient.IOHandler.ReadLn();
  ReceivedMessage := Result;
end;

procedure TForm1.SendMessage(AMessage: string);
begin
  TCPClient.IOHandler.WriteLn(AMessage);
end;
Beim Server ist das noch mit AContext von TidContext.

Die 2 Projekte sind noch im Anhang.

Hoffe einer kann mir da weiter helfen, ich weiss wirklich nicht warum das programm da anhalten sollte :/

MfG
Angehängte Dateien
Dateityp: rar ServerClient.rar (4,98 MB, 18x aufgerufen)
Milos

Geändert von milos (13. Aug 2014 um 14:36 Uhr)
  Mit Zitat antworten Zitat