![]() |
Netzwerkprogramme
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:
bei Empfangen:
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;
Delphi-Quellcode:
Bei einem Test ist mir aufgefallen, das diese methode zwar Fehlerfrei funktioniert
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; 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz