PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script geht - warum in Praxis nicht?


Darthshoot
25.12.2007, 11:31
Hallo!

Ich weiß nicht woran es liegt. Hab jetzt mit Borland C++ 4.0 mal ein kleines Chat-Tool gemacht, welches wunderbar funktioniert, vorausgesetzt ich benutzte diese IP: 192.168.178.23

Falls mich nicht alles teucht, ist das immer die eigene IP? Bin mir aber nicht mehr sicher... Naja ich habe sie auf jedenfall mittels "ipconfig" ermittelt. Wenn ich jetzt meine normale IP nehme, z.b.: 84.178.19.157

Dann verbindet sich der Mist nicht. :( Woran kann das liegen? Ich teste es ja erstmal nur auf meinem eigenen Rechner. Da steht auch etwas in der art wie "IP hat das falsche Format" oder so. Hab ich einfach einen Anfängerfehler gemacht oder sowas?

Danke im Voraus.
MfG Darthshoot


Alamar
25.12.2007, 12:02
Hilfreich wäre der Socket Code.
Vielleicht hast du eine FW die da etwas blockt?

Firefall
25.12.2007, 12:29
Falls mich nicht alles teucht, ist das immer die eigene IP?Die "loopback IP", die du wohl meinst, ist immer 127.0.0.1

Jan Krüger
25.12.2007, 12:32
Aber die angegebene IP-Adresse liegt auf jeden Fall auch in einem lokalen Netzwerk. Von daher würde ich sagen, dass entweder ein Paketfilter bzw. eine Firewall Ärger macht oder dass das Socket nicht auf alle Interfaces gebunden wird (letzteres sollte aber meines Wissens standardmäßig passieren).

Darthshoot
25.12.2007, 12:56
Uff hmm alles Neuland für mich. Also vielen Dank erstmal für die Antworten :)

Sinn des Servers und des Clienten sind - Texte zu senden und zu erhalten. Zum Testen habe ich einfach mal Port 23 genommen, weils so in dem Internet Tutorial stand :D
Hier einfach mal der Code:

Server:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
ServerSocket1->Port = 23;
ServerSocket1->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ServerSocket1->Active = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
Edit1->Clear();
Edit1->Text = Socket->ReceiveText();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ServerSocket1->Socket->Connections[0]->SendText(Edit1->Text);
}
//---------------------------------------------------------------------------


Client:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ClientSocket1->Port = 23;
ClientSocket1->Host = "84.178.19.157";
ClientSocket1->Active = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ClientSocket1->Active = false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Socket->SendText(Edit1->Text);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
Edit1->Clear();
Edit1->Text = Socket->ReceiveText();
}
//---------------------------------------------------------------------------


Ich habs gerade mit nem Kollegen getestet und seine IP genommen, geht auch nicht. Es hätte nämlich theoretisch daran liegen können, dass bei uns 2 PCs einen Router benutzen. Aber so ist das auch zu nichte gemacht. Woran liegt das nur :( und vorallem warum gehts mit diesem IP aus der ipconfig?

ind00r
25.12.2007, 14:57
Es scheint wirklich am Router zu liegen.
Habt ihr auf beiden Seiten den Port freigeschalten?

Darthshoot
25.12.2007, 15:38
Nein hatten wir nicht. Danke, sas wirds wohl sein. Ich habe dazu gleich noch eine Frage. Kann ich den Port freigeben lassen zu meiner internen IP? Damit die sich nicht immer ändert. Geht sowas? ODer muss ich die normale IP wie sie oben z.b. ist eintragen? Es geht nämlich immer noch nicht :(

Edit: Also langsam bin ich am verzweifeln. Nichtmal die Borland C++ 4.0 Examples funktionieren bei mir. Wenn ich meine interne IP angebe und selber auf meinem Rechner probiere klappts, aber net mehr wenn ich es mit nem Kumpel teste, egal ob ich interne IP oder die richtige (z.b.84.178.19.157) benutze. Muss man denn da immer nen Port freigeben? Auf beiden Seiten? Muss ich eigendlich was bei TCP IP "von port" "bis port" eingeben? Oder kann das leer gelassen werden?

claW
25.12.2007, 17:33
derjenige der server macht muss IMMER den port auf seinen rechner forwarden. wie soll es auch anders funktionieren? stell dir vor es hängen 16 rechner am router / switch oder wo auch immer. wenn jetzt nun ein paket über den port 2446 z.b. will, an welchen rechner soll es weitergeleitet werden? zufällig an irgend einen? ne oder? ;) deswegen musst du im router den port forwarden, damit gleicher dann auch weiß zu welchem rechner das paket weitergeleitet werden soll.

kommt darauf an welches protokoll du verwendest. alle fastnet komponenten ( wenn ich mich nicht irre ) basieren auf tcp, außer es steht explizit udp dabei. zu finden auch einfach wenn du auf die komponente klickst und dann f1 drückst ( hilfe lesen bildet :P ;) ). bei von / bis port musst du einfach nur den port angeben. d.h. wenn du port 2446 verwendest kommt bei beiden 2446 rein. wenn du einen zufälligen zwischen 2446 und 2450 verwendest, kommt halt 2446 bei von und 2450 bei bis hinein.

hoffe das hat ein wenig geholfen

Darthshoot
25.12.2007, 18:51
Ahh ok vielen Dank, hat mir weitergeholfen :D hatte natürlich den Port falsch angelegt :rolleyes:

Ich hab noch ne Frage: wie ermittel ich eigendlich den IP eines Clienten? Ich probiere die ganze Zeit schon aus, bekomms aber einfach net gebacken :mauer:

ServerSocket1->Socket->Connections[Client]-> ????

Client stellt eine Variable da.. 0. Demnach wird der erste Client angesprochen. Aber das mit der IP Ermittlung ist echt der Hammer! Danke schonmal :)

claW
25.12.2007, 18:54
ServerSocket1->Socket->Connections[Client]->Remote*

Darthshoot
25.12.2007, 19:35
Ahh das ist natürlich klasse! Danke, jetzt kann ich auch noch gleich den Computernamen ermitteln :D sauber!!! Danke man!!!:D:D

Darthshoot
27.12.2007, 16:17
So also ich bin noch net richtig weiter gekommen.

Ich will jetzt den Client dazu bringen, sich mit dem Server zu verbinden. Über Port 12345. Das macht er auch ganz normal, wenn ich Client und Server auf dem selben Rechner starte -> keine Fehler im Sourcecode.

Ich habe im Router von Rechner des SERVERS den Port 12345 freigeschaltet. Als IP habe ich die interne IP angegeben, die ich Mittels Start->Ausführen->cmd->ipconfig herausgefunden habe.

Sobald ich jetzt mein Client auf einen anderen Rechner packe, verbindet er sich nicht. Aber der Port ist doch offen? Woran liegts :( ich bin sowas von am verzweifeln :(:mauer:

claW
27.12.2007, 17:19
der port muss bei server und client weitergeleitet werden

näheres dazu wird dir aber google verraten wie man einen port auf deinem router weiterleitet.

Darthshoot
27.12.2007, 17:39
Hmm das Problem ist ja, dass ich das ganze mit nur einem Router teste. Wenn ich also einen Port freischalten will für meinen Server, dann geht das - und wenn ich jetzt auch noch einen für meinen Clienten freischalten will, geht das nicht. Da sich jeweils nur die IP am Ende von 23 auf 20 verändert, der Rest aber gleich bleibt. Er sagt dann "FEHLER: Eintrag schon vorhanden". Gibt es da noch irgendeine Möglichkeit? Irgendwie nen freien Port zu ermitteln oder sowas? :( Sorry aber ich habe echt keinen Plan.

EDIT: Ich hab mal den e-Mule Port benutzt, aber der geht auch nicht! Kann es noch am Port liegen?