AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TServer(/Client)Socket Error...
Thema durchsuchen
Ansicht
Themen-Optionen

TServer(/Client)Socket Error...

Ein Thema von timmy443 · begonnen am 8. Sep 2003 · letzter Beitrag vom 8. Sep 2003
Antwort Antwort
timmy443

Registriert seit: 8. Sep 2003
7 Beiträge
 
#1

TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 14:47
Hallo,

ich habe angefangen mich mit TCP/Ip Übertragungen zu beschäftigen und habe ein kleines Programm geschrieben, was mit TServerSocket und TClientSocket den Inhalt eines Memo-Feldes übertragen soll.

Folgende Prozeduren verwende ich:

Client:
VerbindenButton: ClientSocket1.Host:=edit1.Text; //(Ip-Adresse des Servers)
ClientSocket1.Port:=9999;
clientSocket1.Active:=true;

ClienSocketConnect: ClientSocket1.Socket.SendText(Form1.Memo2.text);

Server:
EmpfangButton: ServerSocket1.Port:=9999;
ServerSocket1.Active:=true;

ServerSocket1ClientRead:
Form1.Memo1.text:=ServerSocket1.Socket.ReceiveText ;

Erst muss der Server "Auf Empfang schalten", dann der Client seinen Verbinden-Button drücken.
Das Problem: Der Client erhält immer die Fehlermeldung: Asynchoner Download Error... Was mache ich hier falsch?
Wär cool, wenn mir jemand helfen könnte...!
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#2

Re: TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 15:27
Eigendlich müsste das so gehen, wie Du es gepostet hast.
Kannst Du mal den gesammten Code des Servers und des Clients posten, und Deine genaue Vorgehensweise?

Evi
  Mit Zitat antworten Zitat
timmy443

Registriert seit: 8. Sep 2003
7 Beiträge
 
#3

Re: TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 15:42
Also erst mal vielen Dank für die rache Antwort!
Code:

Client

procedure TForm10.VerbindenClick(Sender: TObject);
begin
ClientSocket1.Host:=edit1.Text; //IP des Servers
ClientSocket1.Port:=23;
clientSocket1.Active:=true;
end;

procedure TForm10.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText(Form1.Memo2.text);
close;
end;


Server:

procedure TForm11.VerbindenClick(Sender: TObject);
begin
ServerSocket1.Port:=23;
ServerSocket1.Active:=true;
end;

procedure TForm11.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.text:=ServerSocket1.Socket.ReceiveText ;
close;
end;



Vorgehensweise:

Client und Server müssen sich "absprechen". Erst muss der Server auf verbinden klicken, dann der Client. Der Server soll so lange auf Port 23 "horchen" bis der Cilent sich anmeldet, dann soll der Client - onClientSocket1Connect - den Text aus der memo schicken und der Server ihn gleich abholen. Aber irgendwie scheint da der Wurm drinne zu sein... funktioniert einfach nicht. Könnte ein vorgeschalteter Router ein Problem darstellen? Verwendet dann ein Client die IP des Routers oder die des PCs? Wenn ja, wie kann ich das umgehen?
Vielen Dank schon mal im voraus
MFG Timmy
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#4

Re: TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 17:27
Im Prinziep machst Du es richtig, aber ändere Deinen Code mal vollgendermaßen um:

Im ClientSocket1Connect Event benutze nicht Clientsocket1.socket, sondern nur socket, denn damit ist der gerade active Socket gemeint.
Amch genau das selbe im ServerSocket1ClientRead Event, also nicht

Form1.Memo1.text:=ServerSocket1.Socket.ReceiveText ;

sondern: Form1.Memo1.text := Socket.ReceiveText;

So wenn der Fehler dann immernoch kommt, kann es Sein, dass Du die falsche IP Adresse benutzt, schau mal in der Eingabeaufforderung( per IPCONFIG) nach, welche die IP/s des Servers ist/sind und probier sie jeweil mal an, falls Du nähmlich mehrere Netzwerkkarten hast, kann es Sein, dass Du einfach die falsche IP gewählt hast.
  Mit Zitat antworten Zitat
timmy443

Registriert seit: 8. Sep 2003
7 Beiträge
 
#5

Re: TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 17:50
Ok, den Code habe ich geändert... aber wie meinst du das genau mit den IPs? Ich dachte ich muss dem Client die IP vom Zielrechner geben. Braucht er Statt dessen die IP des Servers, die auch bei der Netzwerkverbindung angegeben ist (Das kleine Symbol mit den zwei rechnern in der Taskleite, wenn man online ist)? Aber wie findet er dann den Zielrechner. Reicht ihm da einfach die Port-Angabe? Ich glaub ich bring grade alles durcheinander...

Ach ja, die IP die ich bisher versucht habe zu verwenden war die, die IdIpWatch bei dem Zielrechner anzeigt:

Code:
IdIpWatch1.Active:=true;
IdIpWatch1.ForceCheck;
Label1.caption:=IdIpWatch1.CurrentIP;
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#6

Re: TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 18:13
Ich habe mit IPwatch noch nicht gearbeitet, aber ich schätze, du benutzt einfach die falsche IP: bei Adress oder Host des Clients musst Du die IP des Servers eintragen. Also ich geh jetzt mal davon aus, dass Du das ganze in einem LAN versuchst aber selbst wenn, müsse es auch funktionieren, wenn Du es über das Internet Probieren würdest. Also probier das ganze erstmal auf einem Rechner und trage da bei Adress 127.0.0.1 ein ... wenn das klappt starte den Server auf dem 2ten Rechner und trage in den Client die IP des 2ten Rechners ein, die Du zum notfall mit IPCONFIG rausbekommst.

und lass IdIpWatch ganz raus.
  Mit Zitat antworten Zitat
timmy443

Registriert seit: 8. Sep 2003
7 Beiträge
 
#7

Re: TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 18:30
Ich versuche das ganze Tatsächlich übers Internet laufen zu lassen...
Naja und ich hab die IPs mal verglichen, die stimmen überein (die von IpWatch und IpConfig) wobei IpWatch die IP vom Rechner selbst ausgibt und IpConfig sowohl die vom Rechner als auch die vom Server. Aber die brauche ich nicht, oder? Aber ich probiers wirklich am besten noch mal mit der offline-IP auf einem Rechner, mal gucken, was da so rauskommt...
  Mit Zitat antworten Zitat
timmy443

Registriert seit: 8. Sep 2003
7 Beiträge
 
#8

Re: TServer(/Client)Socket Error...

  Alt 8. Sep 2003, 20:03
OK also das funktioniert jetzt soweit, dass ich die Memo-Einträge von Rechner zu Rechner schicken kann. Problematisch wird es nur, wenn ein Router dazwischen hängt. Dann kriege ich wieder den Asynchronen Socket Error. Anders rum gehts. wer hinter einem Router sitzt, kann Nachrichten direkt an Rechner versenden. Deswegen vermute ich dass TClientSocket sowohl die IP des Routers als auch die des Rechners benötigt. Wie kann ich das programmiertechnisch lösen? bzw. wie erkennt TClientSocket ob es sich bei einer IP um einen Router handelt oder nicht? Bin für jede Hilfe dankbar!
MFG Timmy
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz