AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Netzwerkprogramme

Ein Thema von RobinW · begonnen am 20. Mär 2006
Antwort Antwort
RobinW

Registriert seit: 20. Jul 2005
Ort: Schwäbisch Hall
1 Beiträge
 
#1

Netzwerkprogramme

  Alt 20. Mär 2006, 19:55
Hallo

Ich wollte mal ein Mehrspielerspiel programmieren und habe dazu mal
ein bishen in die Beispielprogrammen von Delphi 7 gesehen zweck Netzwerk.
Um mich damit etwas vertraut zu machen habe ich mir ein kurzes Chatprogramm
geschrieben.

Bei Senden hab ich folgendes:
Delphi-Quellcode:
procedure TForm2.Button3Click(Sender: TObject);
var I,ih: Integer;
     s:string;
begin
memo4.Lines.Text:=''; //Memo4 ist die Liste wen man nicht erreicht hat
ih:=0;
while ih<= memo3.items.Count-1 do
begin
  TcpClient1.RemoteHost := Memo3.items[ih]; //Memo3 ist die Liste an wen es gesendet werden soll
  try
    if TcpClient1.Connect then
    begin

      for I := 0 to Memo2.Lines.Count-1 do //Memo2 ist das Eingabefeld
      begin
      TcpClient1.Sendln(Memo2.Lines[I]);

      end;

    end
    else
    begin
    Memo4.Lines.Add('Konnte '+memo3.items[ih]+' nicht ereichen');
    if Checkbox2.Checked then
    begin
      memo3.Items.Delete(ih);
      ih:=ih-1;
    end;
    missed:=missed+1;
    Statusbar1.Panels.Items[2].Text:='Nicht erreicht: '+inttostr(missed);
    end;
  finally
    TcpClient1.Disconnect;
  ih:=ih+1;
  end;
Memo1.SelStart:=length(Memo1.Lines.Text);
Memo1.SetFocus;

end;

Memo1.Lines.Add('Sie ('+DateTimeToStr(GetCurrentDateTime)+')'); //Memo1 ist das ChatFenster
Memo1.Lines.Add('');

Memo1.Lines.Text:=Memo1.Lines.text+Memo2.Lines.text;
    if memo4.Lines.Text <> 'then
    begin
    Memo1.Lines.Add('');

    Memo1.Lines.Add('===== Begin of Log =====');

    memo1.Lines.Text:=memo1.Lines.Text+memo4.Lines.Text;

    Memo1.Lines.Add('===== End of Log =====')
    end;
    Memo1.Lines.Add('');
    Memo1.Lines.Add('');
end;
bei Empfangen:
Delphi-Quellcode:
procedure TForm2.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  s,d: string;
  i,col:integer;
  files: TFileStream;
begin
  if Memo5.Lines.IndexOf(ClientSocket.LookupHostName(ClientSocket.RemoteHost)) <> -1 then//Die Memo5 ist eine IgnoreList
  begin
  igno:=igno+1;
  Statusbar1.Panels.Items[3].Text:='Ignorierte Meldungen: '+inttostr(igno);
  Statusbar1.Panels.Items[4].Text:='Letzte Ignorierte Nachricht ist von: '+ClientSocket.LookupHostName(ClientSocket.RemoteHost);
  abort;
  end;

  if Memo3.items.IndexOf(ClientSocket.LookupHostName(ClientSocket.RemoteHost)) =-1 then
  begin
  messagebox(0,'Ein Chatter hat ihnen eine Nachricht geshickt,'+#10#13+'er wurde der Liste hinzugefügt','Neuer Chatter',0);
  Memo3.items.Add(ClientSocket.LookupHostName(ClientSocket.RemoteHost));
  end;


  col:=strtoint(Memo6.Lines[Memo3.items.IndexOf(ClientSocket.LookupHostName(ClientSocket.RemoteHost))]);

  memo1.SelAttributes.Color:= col;
  memo1.lines.Add(ClientSocket.LookupHostName(ClientSocket.RemoteHost)+' ('+DateTimeToStr(GetCurrentDateTime)+')');
  memo1.Lines.Add('');
  s := ClientSocket.Receiveln;
    while s <> 'do
  begin
    memo1.SelAttributes.Color:= col;
    memo1.lines.Add(s);
    s := ClientSocket.Receiveln;
  end;


  memo1.lines.Add('');
  memo1.lines.Add('');

  If (not Form2.Active)and(Checkbox1.Checked) then // Hier soll es piepsen wenn das Fensterinaktiv
  begin
  windows.beep(1000,200);
  windows.beep(1300,200);
  windows.beep(1600,200);
  end;
end;
Bei einem Test ist mir aufgefallen, das diese methode zwar Fehlerfrei funktioniert
aber nicht gerade schnell ist. Im extremfall ist es sogar mal vorgekommen das die
Nachricht erst 2 Minuten später ankam. Das ist Natürlich untauglich für ein MP-Spiel.

Kann man die Methode nicht noch verbessern?
Oder gibts da noch ne andere (Ich weiß, dass es noch Indy gibt aber damit hatte ich bisher 0 zu tun.)?

Es tut mir Leid mit den ganzen Memo1 bis 5 im Text aber beim Programmieren hab ich daruf nicht geachtet und wenn mans
hinterher ändert wirds noch komischer.

Ich wäre für verbesserungsvorschläge dankbar. Oder wenn sich jemand die mühe macht mir das Indy zu erklären
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz