AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TServerSocket und TClientSocket Übertragungsproblem
Thema durchsuchen
Ansicht
Themen-Optionen

TServerSocket und TClientSocket Übertragungsproblem

Ein Thema von SaraHx · begonnen am 30. Mai 2007
Antwort Antwort
SaraHx

Registriert seit: 4. Mai 2007
11 Beiträge
 
#1

TServerSocket und TClientSocket Übertragungsproblem

  Alt 30. Mai 2007, 18:41
Hallo ich brauche wiedermal eure Hilfe.

Ich versuche mich gerade an einem kleinen Chat mit Hilfe von Sockets.
Selbige habe ich nachregistriert.


Delphi Version: 7
Betriebssysteme: WinXP x64 und WinXP Pro 32Bit


Der Datentransfer zwischen Server und Client funktioniert einwandfrei, bloß die Geschwindigkeit ist etwas, naja sagen wir beschränkt.
Auf dem PC auf dem ich den Server hoste und zugleich den Client laufen lasse erscheint gleich nach dem Versenden die Nachricht bei den verbundenen Clienten.
Schicke ich nun eine Nachricht von dem anderen PC (wo der Server nicht drauf läuft), dauert das Versenden bzw Erscheinen der Nachricht auf beiden Clienten 4-5 Sekunden - ein wenig sehr lang.

Meine Frage nun: Warum ist das so und was kann ich dagegen tun und/oder sollte ich lieber an eine UDP Variante über beispielsweise Indy oder UDPUtils (glaube das war das Third Party Pakage) denken?


Quelltext Server:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure ServerSocket1ClientWrite(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

if not(ServerSocket1.Active) then begin
ServerSocket1.Port := StrToInt(Edit1.Text);
ServerSocket1.Active := true;
Memo1.Lines.Add('Server wurde gestartet..');
Button1.Caption := 'Stop';
end
else begin
ServerSocket1.Active := false;
Memo1.Lines.Add('Server wurde gestoppt..');
Button1.Caption := 'Start';
end;

end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
i: integer;
msg:string;
begin

msg := 'Neuer Client ('+Socket.RemoteHost+'||'+Socket.RemoteAddress+') ist verbunden';

for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin
with ServerSocket1.Socket.Connections[i] do begin
SendText(MSG);
Memo1.Lines.Add('Debug: ClientConnected - ' + IntToStr(i) + ' -' + MSG);
end;
end;

end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var
i:integer;
msg:string;
begin

msg := Socket.RemoteHost+'||'+Socket.RemoteAddress+') ' +Socket.ReceiveText;

for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do begin
ServerSocket1.Socket.Connections[i].SendText(msg);
Memo1.Lines.Add('Debug: ClientRead - ' + IntToStr(i) + ' - ' +msg);
end;

end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
  var
  i:integer;
  msg:string;
begin

for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin
with ServerSocket1.Socket.Connections[i] do if (Connected) then SendText('Client ('+Socket.RemoteHost+'||'+Socket.RemoteAddress+') hat die Verbindung getrennt');
end;

end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
    var
  i:integer;
begin
//for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin
//with ServerSocket1.Socket.Connections[i] do if (Connected) then SendText('Client ('+Socket.RemoteHost+'||'+Socket.RemoteAddress+') hat die Verbindung getrennt - ('+IntToStr(ErrorCode)+')');
//end;

end;

procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
var
i:integer;
begin

//for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin
//with ServerSocket1.Socket.Connections[i] do if (Connected) then SendText('('+Socket.RemoteHost+'||'+Socket.RemoteAddress+') ' +Socket.ReceiveText);
//end;
end;

end.

Quelltext Client:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    Label2: TLabel;
    Edit2: TEdit;
    ClientSocket1: TClientSocket;
    Edit3: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

try
ClientSocket1.host := Edit1.Text;
ClientSocket1.Port := StrToInt(Edit2.Text);
ClientSocket1.Active := true;
except
Memo1.Lines.Add('Fehler beim Verbindungsaufbau!');
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

if (ClientSocket1.Active) then begin
ClientSocket1.Socket.SendText(Edit3.text);
end;

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText)
end;

end.


Ich hoffe meine Infos sind alle ausreichend und zugleich hoffe ich, dass ihr mir helfen könnt.




Grüße
sarah
  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 11:02 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