Autor Beitrag
Travis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Sa 19.10.02 23:52 
Hallo Leute,

ich weiß nicht mehr, was ich noch alles ausprobieren soll. Ich bin gerade dabei eine art Chatprogramm mit Hilfe der Server- und Clientsockets zu programmieren, jedoch kommt immer die Fehlermeldung "Asynchroner Socket-Fehler 10060", wobei die Zahl dahinter eigentlich ständig variiert. Außerdem tritt der Fehler erst während der Laufzeit auf, und zwar kurz nach dem Versuch, den Clienten mit dem Server zu verbinden. Weder in der Delphi-Hilfe, noch über die Suchfunktion von auq.de habe ich eine Antwort zu dem Problem gefunden. Hoffe, dass ihr mir helfen könnt.

Schon im voraus Danke,

Travis
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Sa 19.10.02 23:56 
Stimmt der Port überein?
Stimmt die IP-Adresse?
Läuft der Server?

Wenn du alle Fragen mit ja beantworten kannst, müsste das eigentlich funktionieren.

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 20.10.02 00:03 
Ja, die Ports sind auf beiden Seiten (Server und Client) dieselben, nämlich 2048. Habe aber auch schon andere ausprobiert. Den Server habe ich mit ServerSocket1.open gestartet und Active ist auch auf true gesetzt. Testweise sind auch mal alle Firewalls deaktiviert und die IP-Adressen stimmen auch 100%ig.

Travis
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 20.10.02 00:05 
hmm, bei mir trat der fehler immer dann auf, wenn die Ports, die IPs nicht übereinstimmten bzw. der Server nicht läuft. Such mal in Google nach dem Fehler, vielleicht findeste ja noch eine Lösung. Wenn ja, würde die mich auch sehr interessieren.

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 20.10.02 00:10 
Hab ich schon gemacht, aber dort hab auch nicht wirklich das Wahre gefunden. Ich kann ja mal etwas Code posten. Vielleicht war ich ja auch nur zu blöde und habe etwas übersehen.

Moment, der Code folgt gleich, muss nur noch etwas abgespeckt werden :wink:

Travis
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 20.10.02 00:11 
ok :wink:

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 20.10.02 00:20 
Also, hier nun der Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  ...
    begin
      //Zeiger positionieren
      seek(BookFile, dtsZaehler);
      read(BookFile, datensatz);
      //IP-Adresse an Clientsocket übermitteln
      clSocket.Address := datensatz.IPAdd;
      //Clientsocket aktivieren
      clSocket.Active := true;
      //Verbindung herstellen
      clSocket.Open;
    end;
  ...

Also, clSocket ist der ClientSocket und die IP-Adresse wird auch 100%ig übergeben. Da bin ich mir ganz sicher.

Nachfolgend sollte dann eigentlich folgende Prozedur bei erfolgreicher Verbindung ausgeführt werden...

ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TfrmMain.clSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Socket.SendText(IntToStr(iIdent));
end;


...jedoch wird immer das OnError-Ereignis ausgeführt:

ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TfrmMain.clSocketError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  ErrorCode := 0;
end;

Ich weiß wirklich nicht, wo der Fehler liegen könnte.
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 20.10.02 00:26 
Probier mal folgendes:

Auf der Seite des Servers sendest du eine "Anmeldungsaufforderung", wenn ein Client verbindet. Dann sendest du die Daten in OnClientRead-Ereignis auf der ClientSeite. Versuchs mal.

Bin mir nicht sicher, aber es könnte folgendes sein: Wenn ein Client verbindet, dann muss der Server die Verbindung auch Akzeptieren. Wenn du jetzt Daten sendest, wenn der Server die Verbindung noch nicht akzeptiert hat, dann könnte der Fehler auftreten. Kann gut sein, dass ich mich irre. Kann das heute auch nicht mehr testen, da ich im Moment kein Delphi aufm Rechner habe.

Wenn das einer mal testen könnte, wäre das super :)

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 20.10.02 00:36 
Soweit komme ich ja gar nicht, dass die Daten gesendet werden. Wenn ich Delphi mit F7 Schrittweise durch den Quelltext marschieren lasse, dann ist mir aufgefallen, das eigentlich noch gar nicht gesendet wird, also das OnConnect-Ereignis wird nicht ausgeführt, stattdessen aber das OnError-Ereignis.

Was mir aber auch noch aufgefallen ist, ist dass wenn der Client die Fehlermeldung erhält, auf dem Server genau die gleiche erscheint.

Das beweißt mir ja, dass da irgendwie eine Verbindung besteht, aber auch nur irgendwie. :?

Travis
n@no
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 20.10.02 14:44 
hi,
hier kannst du dir mal ein chat programm runterladen und nen bissel vergleichen, vielleicht findest du da ja noch was...
www.home.pages.at/ullalala/chat.rar 157kb


und hier gibts noch mein trailer zu meinem neuen netzwerk jump & run game, fall es einer mal angucken will..
www.home.pages.at/ul...la/divxuntiteled.avi 22MB
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: So 20.10.02 15:07 
Zwei Sachen:
1. Der Fehlercode 10060 bedeuted:
Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.

2.Schmeiß mal einen von den beiden Befehlen raus: clSocket.Active := true oder clSocket.Open . Denn mit der Aktivierung wird das Socket (das? Socket, der? Socket) auch geöffnet. Probiers mal.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 20.10.02 15:13 
ich glaube, dass das zu keinem Fehler führen dürfte (bin mir nicht sicher). Wenn man Open aufruft, wird Active auf True gesetzt. Wenn man danach nochmal Active auf True setzt, obwohl Active schon auf True gesetzt wurde, dann dürfte eigentlich nicht nochmal verbunden werden.

Wie gesagt, bin mir nicht sicher.

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 20.10.02 15:25 
Danke für den Tipp. Ich kann es jetzt leider nicht direkt testen, da ich gleich weg muss, werde aber das Ergebnis direkt posten, wenn ich weiß, ob es funktioniert hat.

Travis
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: So 20.10.02 20:49 
Das Problem ist gelöst! O'rallY hatte Recht, ich habe jetzt einfach die "clSocket.Active = true" Zeile entfernt und schon funktioniert das Ganze. An dieser Stelle nochmals vielen Dank an alle!

Travis
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: So 20.10.02 21:27 
gut zu Wissen, das der Fehler da lag :wink:

_________________
Viele Grüße
Jakob
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mo 21.10.02 12:20 
Juchhu! Bin ich stolz auf mich :mrgreen: !

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mo 21.10.02 14:28 
darfst du auch sein :wink:

_________________
Viele Grüße
Jakob
Jebaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win NT 4, Win XP, Linux
Delphi 7.0
BeitragVerfasst: Fr 25.10.02 15:03 
Titel: Verzweifelt
Hei leute, ihr kennt mich wohl noch nicht....ich bin informatik-lehrling in der guten kleinen (neutralen :-)) schweiz... nun sitze ich schon die ganz e woche an einem chat programm,...erst mit einer gratis komponente, dann mit indy...und weill ich es bei gott einfach nicht schnallen will...nun auch noch mit den standart-sockets des registers internet...ich habe mir alles schon angescheit was ihr schönes gepostet habt....und kriegs einfach nicht hin!! Ich habe zwei einzelne Progis geschrieben: einen Client und einen Server....wenn ich die beiden Programme auf demselben PC launche, läuft alles, aber wehe ich möchte den Client auf einem anderen Rechner starten und zum (laufenden) Server auf meinem PC verbinden... woran liegt das? ist das überhaupt möglich? nicht mal das chat-programm zum downloaden hier, kann das, oder seh ich das falsch? :cry:
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Fr 25.10.02 16:15 
Hi!

Ich tippe auf hart codierte IP-Adressen, also in den Programmen wird immer versucht, sich mit dem localhost zu verbinden.
Ansonsten: Lässt sich der Rechner vom anderen denn wenigstens anpingen? Was ist mit Hard- bzw. Software-Firewalls? Server vielleicht hinter einem NAT-Netzwerk (z.B. DSL-Router oder so)?

Cu,
Udontknow
Jebaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win NT 4, Win XP, Linux
Delphi 7.0
BeitragVerfasst: Fr 25.10.02 18:24 
Titel: Yuhei
:) hei, danke au deine anregung, leider hab ich sie jetzt zu spät bmerkt :) du hattest völlig recht, es liegt daran, dass ich einfach nicht hinkriegte, wie man bei einem TSocketServer (oder wie das ding schon wieder heisst) die IP festlegen kann, auf dem er "horcht"... standartmässig ist das der localhost, und das wahr das problem...ich hab nun alles nochmals von vorn angefangen und zwar mit den Indy-Komponenten, bei denen man, Gottseidank, die IP frei wählen kann. Nur, ich hab das Gefühl, mit das Indy-Konzept ist noch eine brise...brisanter :-) nein, komplizierter, als mit den standart internet-sockets...tja, mal schauen, danke auf jeden fall für den hinweis....

aber hei, mein Obestift hat gemeint, bei dem socket-server könne man ebenfalls die ip festlege, weiss das jemand?? er ist nämlich schon über ein halbes jahr an einem delphi-chat....und schon viel viel weiter...*grrr