Entwickler-Ecke

Internet / Netzwerk - ShowMessage an IP?


brainkopf - Di 11.12.07 21:26
Titel: ShowMessage an IP?
Hi,
ich bin mir total unsicher ob das hier reingehört, aber ich probier es einfach mal.

Also.
Ich habe nen kleines Programm geschrieben (sehr klein xD)
Das den Text eines Memos in ein ShowMessage ausgibt.

Das ist ja ne tolle spielerei. nur hätte ich es gerne so, das diese Message an eine bestimmte Ip Adresse gesendet wird.
Also wenn PC1 die ip 1.1.1.1 und PC2 die ip 2.2.2.2 hat und das Programm auf PC1 ausgeführt wird, soll die Message an 2.2.2.2 gesendet werden und somit auf PC 2 erscheinen.
Ist das möglich?

mfg
brainkopf

Edit: Achso. Es sollte innerhalb eines Netzwerkes funktionieren!


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Di 11.12.2007 um 20:37


Quitzlinga - Di 11.12.07 22:25

Wenn ich das jetzt richtig verstehe, willst Du ein Chat-Programm schreiben, das Textnachrichten zwische 2 Computern austauscht bzw. nur in eine Richtung die Nachricht sendet ohne Möglichkeit der Rückantwort.

Wenn es das ist, dann schau Dir dazu am besten mal Narses Netzwerktutorial an
http://www.delphi-library.de/topic_TerminatorzeichenProtokollTutorial++1+Sockets+v400_54269.html
oder das mitgelieferte Chat-Beispiel der Indy-Komponenten von Delphi. Beides behandelt deine Problemstellung recht gut. Sei aber nicht gleich erschlagen von dem ganzen Stoff, denn es ist für den Anfang doch recht starker Tobak.


Kroko - Di 11.12.07 22:28

mal net send in die Runde hauend, 8)


brainkopf - Di 11.12.07 22:42

gibt es nicht vll iwi eine möglichkeit das direkt einfach zu senden?

Also nach dem Motto


Quelltext
1:
SendMessage('test') to 1.1.1.1;                    


oder sowas?


Narses - Di 11.12.07 23:28

Moin!

user profile iconbrainkopf hat folgendes geschrieben:
gibt es nicht vll iwi eine möglichkeit das direkt einfach zu senden?
Nein, leider nicht. :|

Der Tipp mit Suche in: Delphi-Forum, Delphi-Library NET SEND kommt deiner Vorstellung davon vielleicht noch am nächsten, allerdings ist doch heute meistens der Netzwerknachrichtendienst deaktiviert, so dass es eh nicht funktionieren wird. :nixweiss:

Damit ist der Tipp, sich mal mit einem Chat-Tutorial zu beschäftigen, IMHO der erfolgversprechendste Weg. :idea: ;)

cu
Narses


brainkopf - Di 11.12.07 23:44

Okay. Danke. Schade wenn es sowas nicht gibt. Den ich finde das mit den 'anmelden' im Chat über den Server etwas blöd. Müssen eigentlich beide Clienten das selbe Programm haben? Oder können die unterschielich sein?


Narses - Mi 12.12.07 00:01

Moin!

user profile iconbrainkopf hat folgendes geschrieben:
Den ich finde das mit den 'anmelden' im Chat über den Server etwas blöd.
Was meinst du denn mit "anmelden"? :gruebel: Wenn du damit TCP-Verbindungen meinst, das geht auch mit UDP [http://www.delphi-library.de/topic_UDPProtokollChatTutorial+V101_56272.html]. ;)

user profile iconbrainkopf hat folgendes geschrieben:
Müssen eigentlich beide Clienten das selbe Programm haben? Oder können die unterschielich sein?
Leider verstehe ich auch diese Frage nicht. :?

cu
Narses


Quitzlinga - Mi 12.12.07 01:18

Simpel ausgedrückt funktioniert es so :

Auf einem Computer läuft die Serversoftware. Komponenten, die du dazu benötigst sind entweder TIDTCPServer oder TIDUDPServer der Indykomponenten aus Delphi je nachdem, welches Protokoll Du nehmen willst, Ich rate zur TCP-Komponente, da das Protokoll auch sicherstellt, das alles ankommt, was Du sendest. Auf dem 2. Rechner läuft dann die Client-Software, die sich an den Server via Netz verbindet (Ich vermute mal, das Du das mit der Anmeldung meinst). So gesehen brauchst Du schon 2 verschiedene Programme : Einmal den Client und einmal den Server. Ich realisiere das aber meistens so, das ich beide Komponenten benutze und den Anwender entscheiden lasse, ob er jetzt Client oder Server spielen will. Das hat den Vorteil, das letztendlich der Benutzer vor sich nur ein Programm vor sich hat aber auch den Nachteil, das sich aus allen Benutzern erst mal der Server herauskristallisieren muss, an den sich dann alle connecten. Natürlich kannst Du auch eine Verteilungsvariante a la ICQ machen, wo alle Computer einen Server aufmachen und diese Adresse einem zentralen Verwaltungsserver mitteilen, der dann diese Adressen auf Wunsch herausgiebt.So können sich Computer untereinander (peer to peer like) verbinden, indem sie sich auf die herausgegebenen Adresse via Client Software verbinden. Ist aber sehr fortgeschrittenes Design und für deinen Fall übertrieben. Ergo : Wieviele Programme dein Benutzer letzendlich vor sich hat, hängt von deinem Konzept ab. Jede Variante, egal ob getrennt oder kombiniert in einem Programm hat seine Vor- und Nachteile.

Zitat:
gibt es nicht vll iwi eine möglichkeit das direkt einfach zu senden?


Kommt drauf an, was Du einfach nennst. Der Befehl zum Text-Senden in der Indykomponente ist einfach : Ein simples writeln('text')und der Text wird von einem zum anderen Computer gesendet. Die Probleme fangen erst dann an, wenn Du die Netzwerkkomponenten noch nicht richtig verstehst. Darum schau dir erst mal das Chat-Beispiel an. das macht genau das, was Du willst und Du kannst erste Netzwerkluft schnuppern. Wenns Dich dann gepackt hat, dann vertiefe Dein Wissen mit dem vorher beschriebenen Tutorial und erweiter Dein Programm. Einfach ist letztendlich (leider) nichts, das ist immer harte Arbeit selbst mit einem so gutem Compiler und Komponenten wie Delphi.

Wenn Du zu dem Chat-Beispiel Fragen hast, dann schick mir einfach ne PM und ich beantworte sie dann. Hab ja selber mal klein angefangen und weiss daher, wie verwirrend das im ersten Moment ist.

MfG

Quitzlinga


brainkopf - Mi 12.12.07 15:11

Danke für die umfangreiche Antwort!
Und mit dem Anmelden habe ich das verbinden mit dem Server gemeint. xD

Ich werde mir einfach mal den Code von dem Chat angucken und vll erstmal den so umschreiben wie ich in brauche.

Ich halte euch auf dem laufenden!


Edit:
So jetzt habe ich ein Problem.
Den gesendeten Text, würde ich gerne in einer ShowMessage anzeigen.
Nur das funktioniert nicht. Es kommt immer ein leeres Fenster.
Wenn dies nicht mit Show Message möglich ist, gibts da eine andere möglichkeit?


Delphi-Quelltext
1:
ShowMessage(Socket.ReceiveText);                    


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Narses - Mi 12.12.07 17:07

Moin!

Deine Codezeile ist ansich erstmal korrekt (kann man ja auch kaum "falsch" machen, sofern was im Empfangspuffer liegt). Zeig mal etwas mehr Code, so kommen wir da nicht weiter. ;)

cu
Narses


brainkopf - Mi 12.12.07 20:23

also. hier die client 2 (Nur Ausgabe möglich)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
unit Unit1;

interface

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

const
  MY_PORT = 12345// an diesem Port wartet der Server auf Clients

type
  TForm1 = class(TForm)
    ServerAdress: TEdit;
    Online: TCheckBox;
    Log: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure OnlineClick(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure BtnSendClick(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    ClientSocket1: TClientSocket; // dynamisch erzeugter TClientSocket
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// bei Programmstart ausführen
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Objekt erstellen; Eigentümer ist das Formular -> so wird das Objekt beim
  // Beenden automatisch mit freigegeben
  ClientSocket1 := TClientSocket.Create(Form1);
  // Ereignisse eintragen
  ClientSocket1.OnConnect := ClientSocket1Connect;
  ClientSocket1.OnDisconnect := ClientSocket1Disconnect;
  ClientSocket1.OnError := ClientSocket1Error;
  ClientSocket1.OnRead := ClientSocket1Read;
  // fertig, ClientSocket dynamisch erstellt
  ClientSocket1.Port := MY_PORT; // Port eintragen
end;

// Online-Checkbox wechselt den Status
procedure TForm1.OnlineClick(Sender: TObject);
begin
  if (Online.Checked) then // falls wir online gehen...
    ClientSocket1.Host := ServerAdress.Text; // ...Serveradresse eintragen
  ClientSocket1.Active := Online.Checked; // neuen Status setzen
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Form1.Destroy
end;
// Verbindung erfolgt (connect) -> Meldung machen
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Log.Lines.Add('Verbunden mit '+ServerAdress.Text);
end;

// Verbindung getrennt (disconnect) -> Meldung machen
procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Log.Lines.Add('Verbindung getrennt.');
  // falls der Server getrennt hat, sonst bleibt der Haken stehen,
  Online.Checked := FALSE; // obwohl wir gar nicht mehr online sind!
end;

// Fehler in der Verbindung aufgetreten
procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  Log.Lines.Add('Fehler '+IntToStr(ErrorCode));
  Online.Checked := FALSE; // sicherheitshalber Verbindung trennen
  ErrorCode := 0// keine Exception erzeugen, Fehler behandelt
end;

// Sende-Button bearbeiten
procedure TForm1.BtnSendClick(Sender: TObject);
begin
  if (ClientSocket1.Active) then // sind wir online?
  else
    Log.Lines.Add('Nicht verbunden!'); // nein, Meldung machen
end;

// Daten vom Server eingetroffen
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  Log.Lines.Add(Socket.ReceiveText); // lesen und ausgeben
  ShowMessage(Socket.ReceiveText);
end;

// bei Programmende ausführen
procedure TForm1.FormDestroy(Sender: TObject);
begin
  if (ClientSocket1.Active) then // noch online?
    ClientSocket1.Close; // ja, dann trennen
end;

end.


Die Client 1 (Ausgabe und schreiben)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
unit Unit1;

interface

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

const
  MY_PORT = 12345// an diesem Port wartet der Server auf Clients

type
  TForm1 = class(TForm)
    ServerAdress: TEdit;
    Online: TCheckBox;
    Log: TMemo;
    Input: TEdit;
    BtnSend: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure OnlineClick(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure BtnSendClick(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    ClientSocket1: TClientSocket; // dynamisch erzeugter TClientSocket
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// bei Programmstart ausführen
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Objekt erstellen; Eigentümer ist das Formular -> so wird das Objekt beim
  // Beenden automatisch mit freigegeben
  ClientSocket1 := TClientSocket.Create(Form1);
  // Ereignisse eintragen
  ClientSocket1.OnConnect := ClientSocket1Connect;
  ClientSocket1.OnDisconnect := ClientSocket1Disconnect;
  ClientSocket1.OnError := ClientSocket1Error;
  ClientSocket1.OnRead := ClientSocket1Read;
  // fertig, ClientSocket dynamisch erstellt
  ClientSocket1.Port := MY_PORT; // Port eintragen
end;

// Online-Checkbox wechselt den Status
procedure TForm1.OnlineClick(Sender: TObject);
begin
  if (Online.Checked) then // falls wir online gehen...
    ClientSocket1.Host := ServerAdress.Text; // ...Serveradresse eintragen
  ClientSocket1.Active := Online.Checked; // neuen Status setzen
end;

// Verbindung erfolgt (connect) -> Meldung machen
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Log.Lines.Add('Verbunden mit '+ServerAdress.Text);
end;

// Verbindung getrennt (disconnect) -> Meldung machen
procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Log.Lines.Add('Verbindung getrennt.');
  // falls der Server getrennt hat, sonst bleibt der Haken stehen,
  Online.Checked := FALSE; // obwohl wir gar nicht mehr online sind!
end;

// Fehler in der Verbindung aufgetreten
procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  Log.Lines.Add('Fehler '+IntToStr(ErrorCode));
  Online.Checked := FALSE; // sicherheitshalber Verbindung trennen
  ErrorCode := 0// keine Exception erzeugen, Fehler behandelt
end;

// Sende-Button bearbeiten
procedure TForm1.BtnSendClick(Sender: TObject);
begin
  if (ClientSocket1.Active) then // sind wir online?
    ClientSocket1.Socket.SendText(Input.Text) // ja, Text senden
  else
    Log.Lines.Add('Nicht verbunden!'); // nein, Meldung machen
end;

// Daten vom Server eingetroffen
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  Log.Lines.Add(Socket.ReceiveText); // lesen und ausgeben
end;

// bei Programmende ausführen
procedure TForm1.FormDestroy(Sender: TObject);
begin
  if (ClientSocket1.Active) then // noch online?
    ClientSocket1.Close; // ja, dann trennen
end;

end.


und die Server

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
unit Unit1;

interface

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

const
  MY_PORT = 12345// an diesem Port melden sich die Clients

type
  TForm1 = class(TForm)
    Log: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private-Deklarationen }
  public
    ServerSocket1: TServerSocket;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// beim Programmstart ausführen
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Objekt erstellen; Eigentümer ist das Formular -> so wird das Objekt beim
  // Beenden automatisch mit freigegeben
  ServerSocket1 := TServerSocket.Create(Form1);
  // Ereignis eintragen
  ServerSocket1.OnClientRead := ServerSocket1ClientRead;
  // fertig, ServerSocket dynamisch erstellt
  ServerSocket1.Port := MY_PORT; // den Port eintragen
  ServerSocket1.Open; // Server aktivieren
  Log.Lines.Add('Server online.');
end;

// beim Programmende ausführen
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ServerSocket1.Close; // Server deaktivieren
end;

// Daten von einem Client eingetroffen
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var
    MyMessage: String;
    i: Integer;
begin
  // Nachricht lesen und davor die IP des Absenders setzen
  MyMessage := Socket.RemoteAddress+': '+Socket.ReceiveText;
  Log.Lines.Add(MyMessage); // Nachricht lokal ausgeben
  // und an alle verbundenen Clients senden
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    ServerSocket1.Socket.Connections[i].SendText(MyMessage);
end;

end.


ich hoffe das ist genügend. xD
bin mir nicht sicher was dafür wichtig. ist.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Quitzlinga - Mi 12.12.07 22:43

Hi

Mit der Socket-Komponente von Delphi kenne ich mich jetzt nicht so gut aus, aber folgende Dinge sind mir aufgefallen :

Zitat:

Delphi-Quelltext
1:
2:
3:
4:
5:
// Verbindung erfolgt (connect) -> Meldung machen 
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); 
begin 
  Log.Lines.Add('Verbunden mit '+ServerAdress.Text); 
end;


Ersetz das am besten mal mit Socket.remotehost. Dadurch bekommst du letztendlich die IP, die auch im Socket steht und mit der du verbunden bist.

Zitat:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
// Daten vom Server eingetroffen 
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin 
  Log.Lines.Add(Socket.ReceiveText); // lesen und ausgeben 
  ShowMessage(Socket.ReceiveText); 
end;


Besser :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// Daten vom Server eingetroffen 
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var MyMessage : string;
begin
  MyMessage := Socket.ReceiveText; // lesen
  Log.Lines.Add(MyMessage); // ausgeben 
  ShowMessage(MyMessage); // und nochmal ausgeben
end;


Probiers jetzt noch einmal aus. Auf Dauer würde ich Dir aber zur INDY-Komponente raten. Die ist wesentlich besser.

MfG

Quitzlinga


Narses - Do 13.12.07 00:32

Moin!

user profile iconbrainkopf hat folgendes geschrieben:
ich hoffe das ist genügend. xD
bin mir nicht sicher was dafür wichtig. ist.
Wenn man von dieser Zeile absieht, ist das exakt der Tutorial-Code: ;)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
// Daten vom Server eingetroffen
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  Log.Lines.Add(Socket.ReceiveText); // lesen und ausgeben
  ShowMessage(Socket.ReceiveText);
end;

Das klappt deshalb nicht, weil du zwei mal aus dem Socket liest, aber nur einmal Daten da sind; wenn du sie gelesen (und ins Memo ausgegeben hast), dann sind da keine Daten mehr. Wie man das Problem lösen kann, hat dir user profile iconQuitzlinga ja bereits gezeigt. ;)



user profile iconQuitzlinga hat folgendes geschrieben:
Mit der Socket-Komponente von Delphi kenne ich mich jetzt nicht so gut aus, aber folgende Dinge sind mir aufgefallen :
Zitat:

Delphi-Quelltext
1:
2:
3:
4:
5:
// Verbindung erfolgt (connect) -> Meldung machen 
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); 
begin 
  Log.Lines.Add('Verbunden mit '+ServerAdress.Text); 
end;


Ersetz das am besten mal mit Socket.remotehost. Dadurch bekommst du letztendlich die IP, die auch im Socket steht und mit der du verbunden bist.
Das ist eigentlich Geschmacksache. Da im Editfeld ServerAdress der eingegebene Hostname steht, würde ich bei einer Meldung auch erwarten, dass da eine Verbindung zu meiner Eingabe hergestellt wurde (das sehe ich der IP-Adresse jedenfalls nicht direkt an).

user profile iconQuitzlinga hat folgendes geschrieben:
Auf Dauer würde ich Dir aber zur INDY-Komponente raten. Die ist wesentlich besser.
Sicherlich sind die Delphi-Sockets nicht state-of-the-art, aber ich wäre doch etwas vorsichtiger mit überschwänglichen Lobeshymnen auf die Indy-Kompos... :?

cu
Narses


brainkopf - Do 13.12.07 12:44

Ja. den Code des Tutorilas habe ich noch nicht auf meine Ansprüche abgeändert, da ich zuerst die Funktion haben möchte.
Den kompletten Code werde ich nachher natürlich noch auf meine bedürfnisse abändern.
Ich hoffe ich darf den so verwenden. Als Grundlage.

Danke.

Also es funktioniert. Geht es jetzt noch, das die IP nicht in der Medlung angezeigt wird?
Weil die Meldung ist so aufgebaut: IP: Inhalt.
Die Ip finde ich in der Meldung etwas störend. Allerdings sollte sie in der Log stehen!


hazard999 - Do 13.12.07 12:53

Hallo,

wie wärs mit UDP-Multicast?

Da wäre dann kein Server notwendig.

r u

René


Narses - Do 13.12.07 13:28

Moin!

user profile iconbrainkopf hat folgendes geschrieben:
Ich hoffe ich darf den so verwenden. Als Grundlage.
Klar, ist ja zum Lernen da. ;)

user profile iconbrainkopf hat folgendes geschrieben:
Also es funktioniert. Geht es jetzt noch, das die IP nicht in der Medlung angezeigt wird?
Weil die Meldung ist so aufgebaut: IP: Inhalt.
Ja, das geht. Die Nachricht wird im Server erstellt und dann an alle Clients gesendet. Aber das wird ausführlich im Tutorial-Text erläutert, bitte da nochmal nachlesen. :les: :think: ;)

user profile iconbrainkopf hat folgendes geschrieben:
Die Ip finde ich in der Meldung etwas störend. Allerdings sollte sie in der Log stehen!
Wenn du das Tut durchgearbeitet hast, sollte es klar sein, wie und wo man dafür ändern muss. Falls es nach der Lektüre noch nicht klar sein sollte, kannst du ja nochmal nachfragen.

cu
Narses


brainkopf - Do 13.12.07 19:28

So.
Also das funktioniert jetzt.
Habs zwar nicht so genau gemacht, aber es funzt.

Jetzt aber nen anderes Problem.
Wenn ich sage, Form1.destroy; läuft der Prozess ja noch weiter.
Allerdings kommen die Meldungen nichtmehr durch.
Gibt es eine möglichtkeit, die Meldungen unabhänig von Form1 zu machen?

Ich würde nämlich gerne Form1 verschwinden lassen.


Narses - Do 13.12.07 19:39

Moin!

user profile iconbrainkopf hat folgendes geschrieben:
Wenn ich sage, Form1.destroy; läuft der Prozess ja noch weiter.
Du darfst das Hauptformular einer VCL-Anwendung nicht einfach freigeben, das führt zu Fehlern. :? Es sollte doch reichen, dieses zu verstecken: Form1.Hide; :idea:

Btw: Bitte nur ein Thema pro Topic, das führt sonst zu Chaos. ;)

cu
Narses


brainkopf - Do 13.12.07 19:48

trotzdem danke. hat funktioniert.

also ich würde sagen, das Thema ist dann wohl geklärt!

Vielen Dank an alle die mir geholfen haben!


brainkopf - So 16.12.07 20:21

Also ich habe das Programm gerade mit nem 2. Pc probiert!

Es funzt nicht!
Es kommt immer ein Fehler! Ich kann nicht verbinden.
Anschließen hängt sich das Programm total auf

Fehler 10060

das ist der Fehler!


Kroko - So 16.12.07 20:36

schau mal dort [http://www.supermailer.de/winsock_errorcodes.htm], :wink:


brainkopf - So 16.12.07 21:19

okay.
und an was kann das liegen das der pc verweigert?
der port ist bei Server und Client freigegeben!


Narses - Mo 17.12.07 00:40

Moin!

user profile iconbrainkopf hat folgendes geschrieben:
und an was kann das liegen das der pc verweigert?
der port ist bei Server und Client freigegeben!
Normalerweise gibt es dafür zwei Gründe: der Port wird von einer Firewall geblockt oder der Server ist nicht online (es könnte auch daran liefen, dass Server und Client versuchen, auf unterschiedlichen Ports eine Verbindung herzustellen).

Klappt es denn lokal?

cu
Narses


brainkopf - Mo 17.12.07 16:14

also.
bei mir zuhause funktioniert es nicht.
bei einem freund funzt es.
Also denke ich, dass es am Router liegt.


Narses - Mo 17.12.07 16:16

Moin!

user profile iconbrainkopf hat folgendes geschrieben:
bei mir zuhause funktioniert es nicht.
bei einem freund funzt es.
Also denke ich, dass es am Router liegt.
Das kann sein. Wenn du den Server anbietest, dann brauchst du ein Port-Forwarding im Router, sonst kann sich niemand zu dir verbinden.

cu
Narses