Entwickler-Ecke

Internet / Netzwerk - Server - Client Asynchronous socket error


Die Brotmafia - Mo 14.11.05 18:40
Titel: Server - Client Asynchronous socket error
Also, ich hab mal ein kleines Server-Client Programm gecodet. (Server connected sich zum Client sozusagen)
Dazu muss ich natürlich erst mal den Client starten lassen. Tue ich das nicht kommt beim ausführen vom Server eine error message "Asynchronous socket error 10061."

Eigentlich hab ich beim Code


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
try
clientsocket1.Active:=true;
except
if not clientsocket1.active=true
then
repeat
try
clientsocket1.active:=true;
except
end;

delay(40000)
until clientsocket1.active=true
end;

Ja ein Try reingemacht, müsste ja eigentlich dafür sorgen dass er keine Fehlermeldung ausgiebt wenn er nicht zum Client connecten kann, was mach ich da noch falsch?
Sagt ruhig wenn ihr ne genauere Beschreibung vom Problem braucht.

Mfg Die Brotmafia

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


Narses - Di 15.11.05 02:00

Moin!

Erstmal: hast du schonmal was von Einrücken oder StyleGuide gehört? Wenn nicht, wird das aber mal höchste Zeit, den Code kann man ja kaum lesen... :roll:

user profile iconDie Brotmafia hat folgendes geschrieben:
Server connected sich zum Client sozusagen

Nein, der Client macht einen Connect beim Server; wirklich, deshalb heißt das nämlich so. :wink:

Klassischer Fehler: du beauftragst den ClientSocket, einen Connect beim ServerSocket zu versuchen und glaubst, dass es sich um einen synchronen Vorgang handelt (ClientSocket.Active := TRUE; oder ClientSocket.Open; ist übrigens dasselbe). Dem ist aber nicht so, die Anforderung wird asynchron ausgeführt (normalerweise, wenn du´s nicht umgestellt hast), so dass du erst im Gesamtprogramm weitermachen darfst, wenn du im ClientSocket1.OnConnect() oder ClientSocket1.OnError()-Event landest. Oder anders gesagt:
ClientSocket1.Open;
[... warten (nicht mit sleep() oder sowas! sondern auf ein Ereignis wie folgt)...]
wenn .OnConnect() eintritt: verbunden, los geht´s
wenn .OnError() eintritt: Fehler, Server nicht erreichbar, was auch immer...

cu
Narses


Kel'Thuzad - Do 08.12.05 17:21

Hi..
@Narses thx, ich hatte das gleiche Problem.
ich wüsste jetzt nur gerne wie man dieses "wenn .OnConnect() eintritt" Ereignis im Quelltext schreibt..

lg
JK


Narses - Mo 12.12.05 01:53

Moin!

user profile iconKel'Thuzad hat folgendes geschrieben:
ich wüsste jetzt nur gerne wie man dieses "wenn .OnConnect() eintritt" Ereignis im Quelltext schreibt..

:gruebel: Sorry, verstehe deine Frage nicht; willst du wissen, wie man den Eventhandler einfügt (-> Objekt markieren, im Inspector auf die Ereignisse-Seite wechseln und einen Doppelklick bei OnConnect machen) oder kannst du nicht ereignisorientiert programmieren? :wink:

cu
Narses


Kel'Thuzad - Di 13.12.05 23:26

Hi, tut mir Leid, habe erst gerade bemerkt dass es ja ein OnConnect Ereignis gibt..

trotzdem danke,
JK


Kel'Thuzad - Di 07.02.06 00:00

Hi , ich bins mal wieder..^^

Bei mir funktioniert das jetzt im LAN problemlos, aber wenn ich mit was im internet verbinden will (und seis auch mein eigener PC) dann kommt der Bruder des Socket Errors 10061, nämlich der "Asynchronous Socket Error 10060". Hab leider keine Ahnung was das ist, aber ich hoffe auf eure hilfe... nein, ich flehe euch an mir zu helfen.. *g*

lg Kel/JK


Narses - Di 07.02.06 00:09

Moin!

user profile iconKel'Thuzad hat folgendes geschrieben:
Bei mir funktioniert das jetzt im LAN problemlos, aber wenn ich mit was im internet verbinden will (und seis auch mein eigener PC) dann kommt der Bruder des Socket Errors 10061, nämlich der "Asynchronous Socket Error 10060".

Das ist ein "WSAETIMEDOUT"-Fehler; 10061 ist übrigens als "WSAECONNREFUSED" definiert. Sagt zwar auch nicht sehr viel darüber aus, warum das passiert, aber immerhin, WAS da nicht klappt.

Leider kann das ziemlich viele Gründe haben, Firewall, Router, etc. pp... :|

Kannst du denn den Host anpingen, zu dem du eine Verbindung aufnehmen willst?

cu
Narses


Kel'Thuzad - Di 07.02.06 23:11

Hi, also meine eigene IP kann ich anpingen, leider wollte mir niemand seine IP sagen, also konnte ich das nicht ausprobieren (und die nennen sich freunde...).

Könnte aber gut sein, das das am router liegt..