lNet Sockets

Alle Fragen zur Netzwerkkommunikation
Antworten
EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

lNet Sockets

Beitrag von EugenE »

Hallo,

ich habe versucht dieses Delphi Tutorial:

http://www.delphi-library.de/topic_Mini ... 60744.html

mit lNet zu machen.

Nur bekommt der Client keine Verbindung zu stande.... "Connection Refused"

Ich glaube das der Server geht weil in der Firewall wird der als Listen eingetragen also ist der doch offen oder?

Im Anhang der Chat , .... der nich geht bzw sich noch nciht mal verbindet
Dateianhänge
Chat.rar
(319.96 KiB) 118-mal heruntergeladen

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

1. der Server braucht meistens UDP und TCP, die müssen beide in FW offen sein

2. Verbindung abgelehnt könnte ein falscher Port sein. Guck nach welcher Port am Client eingestellt ist.

3. Läuft der Server bei dir oder woanders?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

Der Server ist aufm Rechner also Localhost offen
Beider Programme benutzen den 31337 sowohl der Server als ListenPort und der Client als Connect Port

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Ah, und da der auf Windoofs läuft erkennt er den Loopback nicht. Falls du jetzt localhost eingestellt hast als Server dann änder das mal auf 127.0.0.1, respektive umgekehrt.

Bei Windoofs geht soweit ich mich erinnere localhost nämlich nicht. Das Gleiche hat man bei SQL-Servern auch, du kannst darauf einfach nicht zugreifen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

immernoch connection refused

habe doch meinen code im ersten Post hochgeladen vllt fehlen da noch angaben oder sonstiges

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

So, bau mal den Server nach dem Muster wie beim Client. Dann kannst du verschiedene Ports leichter ausprobieren.
Dateianhänge
Chat.zip
(334.49 KiB) 103-mal heruntergeladen
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

thx nach einpaar fehlern , tests usw konnte ich endlich mal connecten , danke ;) , jez kann ich den rest proggen^^

Nochmals Dankööö ;)

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

wer hätte es nich gedacht aber ich habe wieder einen bug :D

Code: Alles auswählen

ShowMessage('Count: '+ inttostr(TCP.Count));
 
   for i:=0 to TCP.Count do
   begin
      TCP.Socks[i].SendMessage(msg);
   end;


hm bei Count kommt immer nur 1 obwohl ich mit 2 connectet war :( , hat jemand ne bessere lösung um msg an alle verbundenen sockets zu verschicken? weil mit dem code was ich habe wird immer nur der letzt verbundene angeschrieben

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Wie jetzt, 2 Clients 1 Server oder wie soll das aussehen?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

jop rate mal warum es chat heißt? :D

also beide sind connected aber nur der letzt verbundune kann schreiben bzw nachrichten empfangen

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Naja, ja nun. Bei ansynchroner Verbindung könnten das auch 3 Server sein... :lol:

Aber warum machste das dann aus einem Client. Starte doch einfach den Client nochmal. Nur wirst du da bei einer Maschine das eine oder andere Problem kriegen. Der Client-Socket kann mit gleichem Port auf nicht auf der gleichen Maschine laufen. Der Server unterscheidet normalerweise nach deinem Client-Port und der wird normalerweise durch deinen Router maskiert. Nach außen sieht der also anders aus um dich vor Angriffen zu schützen.

So gesehen ist das normal, das er immer den gleichen Client verbindet.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

nein ich hatte den server bei mir aufm rechner an , einen clienten auch und ein kollege einen clienten auf seinem rechner auf , so konnte alles verbinden aber wenn er oder ich eine nachricht eingebe , wird diese nur an einen clienten weitergeschickt und nicht an beide , das meine ich , darum brauche ich irgend einen anderen code der das ermöglich das ich an alle verbundenen clienten , die texte schicken kann^^

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

Code: Alles auswählen

sock := aSocket.PrevSock;
   sock2 := aSocket.NextSock;
   while( sock <> nil) do begin
       sock.SendMessage(msg);
       sock := sock.PrevSock;
   end;
   while( sock2 <> nil) do begin
       sock2.SendMessage(msg);
       sock2 := sock2.NextSock;
   end;
   aSocket.SendMessage(msg);


damit habe ich jez mein Problem selbst gelöst^^

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Dann kannst du das nur am Server dadurch lösen, das du dir eine Client-Verwaltung einbaust. Jeder Client der sich connected (OnConnect) muß in ein Liste, z.B. FClientList: TList. Dann mußt du dir da eine Command-Struktur einbauen die bestimmte Befehle entgegennimmt. Z.B. cmdBroadcast für "sende an alle", der Befehl kommt als erstes in der Message und wird vom Server extrahiert und dann die ClientList durchlaufen und an alle außer dem Sender geschickt.

Bei sowas geht das schon ans Eingemachte.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten