AGB  ·  Datenschutz  ·  Impressum  







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

Chat (IP)

Ein Thema von Schnittcher · begonnen am 25. Aug 2009 · letzter Beitrag vom 28. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#1

Chat (IP)

  Alt 25. Aug 2009, 10:35
Hallo,

kann mir jemand helfen und mir sagen, was heir falsch ist?

Client:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, AppEvnts, ExtCtrls, ScktComp, IdBaseComponent, IdComponent,
  IdIPWatch;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    lbIP: TLabel;
    Label4: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    edNachricht: TEdit;
    edIP: TEdit;
    edNickname: TEdit;
    cmdSenden: TButton;
    cmdSetzen: TButton;
    cmdNick: TButton;
    ClientSocket1: TClientSocket;
    ApplicationEvents1: TApplicationEvents;
    IdIPWatch1: TIdIPWatch;
    Timer1: TTimer;
    Label6: TLabel;
    lbNickname: TLabel;
    Memo1: TMemo;
    cmdVerlassen: TButton;
    ServerSocket1: TServerSocket;
    procedure cmdNickClick(Sender: TObject);
    procedure cmdVerlassenClick(Sender: TObject);
    procedure cmdSendenClick(Sender: TObject);
    procedure cmdSetzenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure delay(time:word);
    procedure Timer1Timer(Sender: TObject);
    procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
 var Nickname, Nachricht:String;
{$R *.dfm}

procedure TForm1.delay(time: word);
var Start:Integer;
begin
  Start:=GetTickCount;
  while (GetTickCount) - (Start) <= time do
  Application.ProcessMessages;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Create(Form1);
ClientSocket1.Create(Form1);
lbIP.Caption := IdIPWatch1.LocalIP; // Die aktuelle IP-Adresse wird angezeigt.
cmdSenden.Enabled:= false;
cmdSetzen.Enabled:= false;
label6.Visible:=False;
lbNickname.Visible:=False;
end;

procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    var msg: string;
begin
  Memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm1.cmdNickClick(Sender: TObject);
begin
Nickname:= edNickname.Text;
//cmdSenden.Enabled:=True;
cmdSetzen.Enabled:=True;
//cmdNick.Visible:=False;
edNickName.Enabled:=False;
Label6.Visible:=True;
//lbNickname.Visible:=True;
lbNickname.Caption:= Nickname;
Label5.Visible:=False;

end;

procedure TForm1.cmdSendenClick(Sender: TObject);
begin
if (ClientSocket1.Active=true) and (edNachricht.Text<>'') then
CLientSocket1.Socket.SendText(Nickname+': ' +edNachricht.Text);
edNachricht.Text := '';
end;

procedure TForm1.cmdSetzenClick(Sender: TObject);
begin
ClientSocket1.Host:= edIP.Text;
ClientSocket1.Port:= 1990;
ClientSocket1.Active:= True;
cmdSetzen.Enabled:= False;
edIP.Enabled:= False;
cmdSenden.Enabled:= True;
Nachricht:= edNickName.Text+' hat den Raum betreten.';
delay(500);
ClientSocket1.Socket.SendText(Nachricht);

end;

procedure TForm1.cmdVerlassenClick(Sender: TObject);
begin
ClientSocket1.Socket.SendText(edNickName.Text+' hat den Raum verlassen.');
delay(500);
ClientSocket1.Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
lbIP.Caption:= IdIPWatch1.LocalIP;
end;
end.
Server:

Delphi-Quellcode:
unit server;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    IdIPWatch1: TIdIPWatch;
    Label1: TLabel;
    ServerSocket1: TServerSocket;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption:= IdIPWatch1.LocalIP;
ServerSocket1.Create(Form1);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var Text:string;
i: Integer;
begin
Text:=Socket.ReceiveText;
Memo1.Lines.add(Timetostr(now)+': '+Text);
For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
begin
with ServerSocket1.Socket.Connections [I] do
if (Connected) then SendText(Text);
end;
end;

end.
Es werden keine Nachrichten verschickt.

Gruß,
Schnittcher
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Chat (IP)

  Alt 25. Aug 2009, 10:59
-Du versuchst ClientSocket und ServerSocket im FormCreate manuell zu erzeugen, dabei passiert das automatisch, weil die Komponenten auf der Form liegen
-Du erzeugst sie auch noch falsch. SChau dir evtl. mal ein OOP-Tutorial an.
-Dem ServerSocket muss gesagt werden, dass er auch lauschen soll. Die Eigenschaft heißt Active, glaube ich.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#3

Re: Chat (IP)

  Alt 25. Aug 2009, 12:01
Hallo,

ja du hast ja recht.

So ich habe jetzt nochmal einen Haltepunkt gesetzt Active:= True;
wird niemals true es bleibt immer false.

Gruß,
Schnittcher
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Chat (IP)

  Alt 25. Aug 2009, 12:31
Wie sieht denn das Stück Code jetzt aus wo der Server aktiviert wird?
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#5

Re: Chat (IP)

  Alt 25. Aug 2009, 12:41
Delphi-Quellcode:
ServerSocket1.Port:= 1990;
ServerSocket1.Active:= True;
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#6

Re: Chat (IP)

  Alt 25. Aug 2009, 12:56
So das verschicken geht, aber es kommt nur Müll an.

Zum Beispiel:

Zitat:
㼿㐿㼿㼿㼿㼿猿甠摮晥湩摥
13:56:25: 晤⁧慨⁴敤慒浵戠瑥敲整⹮s undefined.
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Chat (IP)

  Alt 25. Aug 2009, 15:40
Port 1990? AFAIK sollte man nicht so niedrige Ports verwenden, da die oft schon mit anderen Diensten belegt sind/sein können ([hier] mal die aktuelle Portliste), 1990 ist auch dabei:
Code:
stun-p1         1990/tcp  cisco STUN Priority 1 port
stun-p1         1990/udp  cisco STUN Priority 1 port
Ob das jetz was mit deinem Problem zu tun hat weiß ich nicht (vielleicht empängt dein Server irgendwelche cisco-Pakete), aber du kannst ja mal einen freien Port ausprobieren. Ansonsten sieht das eigentlich recht normal aus (ich hab aber auch länger nicht mehr direkt mit den Sockets hantiert).
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#8

Re: Chat (IP)

  Alt 25. Aug 2009, 15:43
daran liegt es nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Chat (IP)

  Alt 25. Aug 2009, 16:28
Zeig doch nochmal den ganzen Code.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#10

Re: Chat (IP)

  Alt 26. Aug 2009, 07:45
Server:

Delphi-Quellcode:
unit server;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    IdIPWatch1: TIdIPWatch;
    Label1: TLabel;
    ServerSocket1: TServerSocket;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption:= IdIPWatch1.LocalIP;
ServerSocket1.Port:= 55555;
ServerSocket1.Active:= True;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var Text:string;
i: Integer;
begin
Text:=Socket.ReceiveText;
Memo1.Lines.add(Timetostr(now)+': '+Text);
For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
begin
with ServerSocket1.Socket.Connections [I] do
if (Connected) then SendText(Text);
end;
end;
end.
Client:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, AppEvnts, ExtCtrls, ScktComp, IdBaseComponent, IdComponent,
  IdIPWatch;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    lbIP: TLabel;
    Label4: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    edNachricht: TEdit;
    edIP: TEdit;
    edNickname: TEdit;
    cmdSenden: TButton;
    cmdSetzen: TButton;
    cmdNick: TButton;
    ClientSocket1: TClientSocket;
    ApplicationEvents1: TApplicationEvents;
    IdIPWatch1: TIdIPWatch;
    Timer1: TTimer;
    Label6: TLabel;
    lbNickname: TLabel;
    cmdVerlassen: TButton;
    Memo1: TMemo;
    procedure cmdNickClick(Sender: TObject);
    procedure cmdVerlassenClick(Sender: TObject);
    procedure cmdSendenClick(Sender: TObject);
    procedure cmdSetzenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure delay(time:word);
    procedure Timer1Timer(Sender: TObject);
  private

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
 var Nickname, Nachricht:String;
{$R *.dfm}

procedure TForm1.delay(time: word);
var Start:Integer;
begin
  Start:=GetTickCount;
  while (GetTickCount) - (Start) <= time do
  Application.ProcessMessages;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
lbIP.Caption := IdIPWatch1.LocalIP; // Die aktuelle IP-Adresse wird angezeigt.
cmdSenden.Enabled:= false;
cmdSetzen.Enabled:= false;
label6.Visible:=False;
lbNickname.Visible:=False;
end;

procedure TForm1.cmdNickClick(Sender: TObject);
begin
Nickname:= edNickname.Text;
//cmdSenden.Enabled:=True;
cmdSetzen.Enabled:=True;
//cmdNick.Visible:=False;
edNickName.Enabled:=False;
Label6.Visible:=True;
//lbNickname.Visible:=True;
lbNickname.Caption:= Nickname;
Label5.Visible:=False;

end;

procedure TForm1.cmdSetzenClick(Sender: TObject);
begin
ClientSocket1.Host:= '192.168.255.123';
ClientSocket1.Port:= 55555;
ClientSocket1.Active:=True;
cmdSetzen.Enabled:= False;
edIP.Enabled:= False;
cmdSenden.Enabled:= True;
Nachricht:= edNickName.Text+' hat den Raum betreten.';
delay(500);
ClientSocket1.Socket.SendText(Nachricht);

end;

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

procedure TForm1.cmdSendenClick(Sender: TObject);
begin
if (ClientSocket1.Active=true) and (edNachricht.Text<>'') then
CLientSocket1.Socket.SendText(Nickname+': '+edNachricht.Text);
edNachricht.Text := '';
end;

procedure TForm1.cmdVerlassenClick(Sender: TObject);
begin
ClientSocket1.Socket.SendText(edNickName.Text+' hat den Raum verlassen.');
delay(500);
ClientSocket1.Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
lbIP.Caption:= IdIPWatch1.LocalIP;
end;

end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:04 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