Laden...

TcpClient kann nicht verbinden?

Erstellt von Schattenkanzler vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.479 Views
S
Schattenkanzler Themenstarter:in
238 Beiträge seit 2004
vor 18 Jahren
TcpClient kann nicht verbinden?

Hallo Allerseits!

Folgendes Problem habe ich: Ich habe eine Server- und eine Client-Anwendung. Momentan laufen beide zu Testzwecken auf dem gleichen Rechner. Ziel ist es, Dateien zwischen zwei Rechnern komfortabel austauschen zu können (hängen hinterm gleichen Router, feste IPs entsprechend).

Habe dann das Grundgerüst für Server und Client aufgebaut und wollte dann mal zu Testzwecken verbinden.

Hier mal Ausschnitte aus dem Code:

Server:

		private void DoListen(int port)
		{
			//Make the TcpListener listen on specified port!
			IPAddress localhost = IPAddress.Parse("127.0.0.1");
			this._server = new TcpListener(localhost, port);
			MessageBox.Show("Created new Server!");
		}



		void MainFormLoad(object sender, System.EventArgs e)
		{
			try
			{
               //Localhost, Port 999
				this.DoListen(999);
				this.StartServer();
			}
			catch(Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
		}

Client:



		private bool Connect(string ip, int port)
		{
			//Try to connect
			try
			{
				this._client = new TcpClient(IPAddress.Parse(ip).ToString(), port);
				this._client.Connect(IPAddress.Parse(ip), port);
				
				return true;
			}
			catch (Exception ex)
			{
				throw ex;
			}			
		}


		void MainFormLoad(object sender, System.EventArgs e)
		{
			
				if(this.Connect("127.0.0.1", 999))
				{
					MessageBox.Show("Verbunden!");
				}
				else
				{
					MessageBox.Show("Nicht verbunden!");
				}			
		}

Wenn ich nun bei laufendem Server versuche, den Client zu verbinden, bekomme ich immer und nur folgende Fehlermeldung:

Eine Verbindungsanforderung bezog sich auf einen bereits verbundenen Socket

Diese tritt dort auf, wo der Client versucht, zu connecten (klar, oder?).

Habe schon einige Sachen versucht: Port gewechselt, Firewall deaktiviert, ...
Davon hat jedoch nichts geholfen, deshalb frage ich hier nach...

Kann mir jemand bei meinem Problem helfen?

Greets - SK

Sagte ich schon Danke? Nein? ...kommt noch...

F
529 Beiträge seit 2003
vor 18 Jahren

Ist der TCPListener ordnunsgemäß gestartet? Kannst du mal bitte noch den Code mit dem Teil zeigen, bei dem eine Verbindung vom Server angenommen wird?

Noch eine Frage:
Warum gibst du die Verbindungsdaten beim Erzeugen des Objekts und beim Herstellen der Verbindung an? Ich habe die IP und den Port immer nur der Connect-Methode mitgegeben. Und in der MSDN wird die Connect garnicht aufgerufen. Dort wird direkt der Stream nach dem Erzeugen des Objekts genommen um Daten zu übertragen. Evtl. liegt da der Fehler. (Was aber irgentwie unwarscheinlich ist)

Besuchen sie das VisualC++ - Forum

S
Schattenkanzler Themenstarter:in
238 Beiträge seit 2004
vor 18 Jahren

Autsch! Habe einfach die Zeile

this._client.Connect(IPAddress.Parse(ip), port);

aus dem Client entfernt und alles läuft wunderbar...
Mir erschien es nur logisch, das noch mit aufzurufen...egal, jetzt geht's einwandfrei!

Danke dir Franknstein! 😁

Greets - SK

Sagte ich schon Danke? Nein? ...kommt noch...

S
Schattenkanzler Themenstarter:in
238 Beiträge seit 2004
vor 18 Jahren

Hmm, ich hätte mal noch eine Frage, die ich gerne beantwortet hätte, vielleicht kennt ja jemand ein Beispiel oder eine fertige Klasse für mein Problem, ich jedenfalls bin auch nach einer Suche bei CodeProject noch immer sehr ratlos.

Also, ich möchte mit meinem Client dem Server sagen können, eine Datei auf den Client hochzuladen. Natürlich auch andersherum. Einfach: Die beiden sollen Daten hin und her schicken können.

Bei wirklich kleinen Dateien ist das ja eigentlich kein Problem: Verbindung aufbauen, Stream erstellen, Datei byteweise in den Stream werfen, lesen und speichern, fertig.

Bei großen Dateien würde ich aber lieber asynchron arbeiten mit BeginWrite und BeginRead...

Leider sind Asynchronität und Threading noch immer ziemlich böhmische Dörfer für mich, daher wende ich mich einfach hilfesuchend an euch...

Würde mich freuen, wenn ihr mir dazu helfen könntet...

Greets - SK

Sagte ich schon Danke? Nein? ...kommt noch...

D
481 Beiträge seit 2005
vor 18 Jahren

http://www.developerfusion.co.uk/show/3574/

Da ist n kleiner Chat Client/Server per TCPClient und Threading is auch drin.

Dexter

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

F
529 Beiträge seit 2003
vor 18 Jahren

Würde ich nicht asyncron machen. Es macht zwar mehr Aufwand, wenn du die Dateien zerlegst, versendest und dann wieder zusammenbaust, aber dafür kannst du einige Vorteile nutzen. So musst du zum Beispiel dich nicht dem dem asyncronen Zeuch rumplagen. Außerdem kannst du, je nach dem wie komplex das Protokoll ist, auch noch andere, wichtigere (Steuer)Daten übertragen. Und wenn mal die Verbindung zusammenbricht, macht das auch nichts, da du ja problemlos gucken kannst, welche Packete der Datei fehlen.

Besuchen sie das VisualC++ - Forum

S
Schattenkanzler Themenstarter:in
238 Beiträge seit 2004
vor 18 Jahren

Sehr schön! Die Idee mit dem Datei zerlegen ist gar nicht übel, hätt ich auch selbst drauf kommen können. Als Protokoll nehm ich ganz normal TCP/IP. Der Quellcode sieht auch ganz gut aus, denke mal, dass ich damit was hinkriegen kann...drückt mir die Daumen!

Greets und THX - SK

Sagte ich schon Danke? Nein? ...kommt noch...