Archiv verlassen und diese Seite im Standarddesign anzeigen : Chattprogramm
Timelinker
26.11.2001, 19:54
Hallo Leute!
Ich schreibe gerade ein Chattprogramm, bin jetzt schon soweit, dass mann die eigene IP herausfinden kann und
in einem Textfeld eine IP eingeben kann zu der man connecten möchte.
Und jetzt kommtz das Problem: beim Connecten bekomme ich folgende Fehlermeldung: "Asynchronous Socket Fehler". X( Der Code ist bis jetzt 100% richtig.
Frage: Ich benutze Win XP, kann es sein dass das System nur betimmte Ports benutzt und alle andere die nicht benutzt werden ausgeschaltet werden?
Hmmm.. was verwendest du für Komponenten?
Und der Code den du zum Verbinden verwendest wär auch sehr hilfreich :)
an WinXP liegt es bestimmt nicht, das sieht fast so aus, als ob die Daten falsch verarbeitet werden bzw. ned sauber gesendet werden oder du gar ned richtig connted bist..
so long
DJ-Cyrus
Timelinker
26.11.2001, 21:02
Ich verwende die Standart Komponenten: TClienSocket und TServerSocket (Delphi5)
Hier kommt der Source (das wichtigste ´zusammengefasst):
procedure TForm1.Button1Click(Sender: TObject);
begin
Server.Port:=44044;
Client.Port:=44044;
Client.Host:=ipAdressEdit.Text;
Server.Open;
Client.Open;
{hier weiß ich nicht ob ich Server.Active und Client.Active auf True setzen muss oder nicht, habe es nur mit false ausprobiert, für die andere Optin noch keine Gelegenheit gehabt}
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Client.Close;
Server.Close;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if Client.Active = true then Client.Socket.SendText(Edit1.Text);
Edit1.Text:=´´;
end;
procedure TForm1.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(´***Connected.´)
end;
procedure TForm1.ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(´***Disconnected.´);
end;
alles weitere ist unwichtig (is nur für die Einblendung von Fenstern und solche Spielereien)
Also es könnte sicher was bringen, Client und Server auf activ zu setzen ;) :D
Aber.. was anderes:
Client.Host:=ipAdressEdit.Text;
Kann man da einen String verwenden? Ich weiß es selbst nciht, aber ich würde jetzt mal tippen, dass man da
Client.Host:=StrToInt(ipAdressEdit.Text);
schreiben sollte.. ich würds jedenfalls intuitiv so machen :)
Sonst konnte ich auch keine Fehler entdecken
mfg, Agent
Timelinker
26.11.2001, 22:29
Original von AgentSmith
Aber.. was anderes:
Client.Host:=ipAdressEdit.Text;
Kann man da einen String verwenden? Ich weiß es selbst nciht, aber ich würde jetzt mal tippen, dass man da
Client.Host:=StrToInt(ipAdressEdit.Text);
schreiben sollte.. ich würds jedenfalls intuitiv so machen :)
Hmm. ich habe in die Box die Standart IP meines PC´s eingegeben (also 127.0.0.1) und es ging, es geht auch der Name meine Computer, als auch die Standartadresse localhost. Außerdem denke ich dass die Procedur StrToInt da nicht mitmachen würde, ich meine seit wann hat Integer so viele Nachkommawerte ?(
Das mit der Aktivierung der Sockets muss ich noch testen.
Hmmm.. ok, das mit den Hosts war ein Denkfehler meinerseits.. aber probier mal dieses activ aus :)
Cya
also mit aktiv kannst du beim Server sagen, ob er am port abhören soll oder nicht - also wenn du das deaktiviert hast kann logischwerweise auch keine Verbindung aufgebaut werden! Wie soll sonst der Client auf nen Port connecten, der nicht geöffnet ist?
so long
Dj-cyrus
Timelinker
27.11.2001, 22:15
Hmm na ja, ich dachte wenn ich TClientSocket auf Open setze, also TClientSocket.Open dann wird er automatisch aktiviert. :O
ne das is ned so.. das open ist ja nur, dass du ne Verbindung zum Server aufbauen willst! Sprich: du verbindest den Client mit nem Port vom Server, der offen ist.
Also muss der Server-Port geöffnet werden und das geht nur mit aktiv!! Du hast ja normalerweise den Client und den Server nicht in der gleichen Anwendung (macht logischerweise auch keinen Sinn) Deshalb kann der Client auch keine Ports vom Server öffnen.. du kannst ja auch nicht bei einem PC im Interet einfach so nen Port öffnen - dann könnte ja jeder fröhlich rum hacken ;)
so long
Dj-Cyrus
ich kenn mich zwar net in delphi aus, aber normalerweise gibt es doch nur 32xxx ports (genaue zahl faellt mir grad net ein... )
wie kommst du dann auf 44044 ?
Server.Port:=44044;
Client.Port:=44044;
jede IP kann 65786 Ports haben bzw. hat soviele Ports..
so long
Dj-Cyrus
dann lag ich falsch... sorry...
@silencer macht ja nix, aber durch dein Qoute hab ich jetzt grad wieder nen Fehler entdeckt
Wieso wird da Server und Client auf den gleichen Port gesetzt?? Das kann ja nicht gehen..
so long
Dj-Cyrus
Seit wann denn das?
Oder hab ich grad ein BlackOut und check nich, was du meinst?
Timelinker
01.12.2001, 22:15
Hallo Jungs!
Also ich weiß jetzt was mein Problem war: der abgef***
Firewall von WinXP war eingeschaltet (und ich hab´s nicht gecheckt PFUI!)
Zum Thema Client.Active: wenn ich den Clienten und Server auf Active setze, dann erscheint der bekannte Socket Fehler auch wenn ich versuche mich mit mir selbst zu connecten.
Frage2: Kann ich durch den Echo-Port meines Anbieters kommunizieren? Und wenn ja, wie finde ich welcher von den Ports der Echo-Port ist?
Frage3: Kann mir jemand einen Tipp geben wie ich folgende Sache umsetzen kann: Ich will dass die User diesen IP Untauschmist nicht benutzen müssen, wie muss ich da vorgehen? IP´s in eine SQL Tabelle speichern und bei jedem Start soll dann das Progi nachsehen wer gerade online ist, oder vielleicht soll beim Start eine EMail mit der aktuellen IP an eine Adresse verschickt und sogleich heruntergeladen werden? ?(
zu 1. das hab ich bereits ein Posting weiter oben beantwortet: 2. Komponente versuchen auf den gleichen Port zu listen bzw. einen Outgoing-Connect zu machen..
zu 2 diese Frage hab ich ned so recht verstanden; der Echo-Port is Nr. 7
zu 3 du könntest mal mit Domains und ned met IPs arbeiten (z.B www.dnsart.com) oder so..
ao long
Dj-Cyrus
Timelinker
03.12.2001, 13:57
Hmm... Mal angenommen, dass ich das Progi umschreibe
und habe dann z.B
Client.Port:=44000;
Server.Port:=54000;
//also verschiedene Ports
Wie zum Teufel sollen Client und Server dann kommunizieren wenn sie verschiede Ports abhören???
Das ist doch genauso wenn ich mit einem Afrikaner Deutsch reden würde.
Und wie geht die Kommunikation über die Domains? Sollen die User statt einwer IP Adresse einfach nen Domainnamen eingeben? Und weiter?
Jo.. das versteh ich uach ned.. wieso sollen Server und Client unterschiedliche Ports bekommen??
Ich hab noch nciht arg viel mit Internet geproggt, aber.. da muss man doch denselben Port nehmen??? ?(
Wegen dem Domainnamen.. mach halt nen HostLookUp.. IP to Domain und umgekehrt.. da findeste sicher massig Sourcebeispiele/Komponenten im Netz :)
mfg, Agent
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.