myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Netzwerktechnologien » Nachricht an einen Port schicken
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Nachricht an einen Port schicken

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
rockynl
myCSharp.de-Mitglied

Dabei seit: 10.02.2004
Beiträge: 53


rockynl ist offline

Nachricht an einen Port schicken

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

hab da nochmal ein Problem ...

Ich möchte mit einem Clientprogramm eine Nachricht an einen Port einer bestimmten Ip (Server) schicken, die dann von einem anderen Programm abgefragt wird.
Soweit so gut, das ganze funktioniert auch wenn eine Netzwerkverbindung besteht und das andere Programm läuft.
Wenn nicht stürzt das Clientprogramm ab !

Zur Zeit mach ich das am Client so

C#-Code:
try
{
//Client öffnen
TcpClient client = new TcpClient(arr_PCInvent[1], int_port);

//Text in Byte umwandeln
Byte[] data = System.Text.Encoding.ASCII.GetBytes(str_AusgabeText);

//Netzwerkstream öffnen
NetworkStream stream = client.GetStream();
//Datensatz schreiben
stream.Write(data, 0, data.Length);

//Client schließen
client.Close();

}
catch
{
//Fehlerbehandlung
lstFehlerausgabe.Items.Insert(0, System.DateTime.Now.ToString() + "  Fehler beim Versenden der Nachricht an die IP: " + arr_PCInvent[1]);

}

Wenn keine Verbindung erstellt werden kann läuft das Programm ab Zeile 4 in den Catch-Teil und hängt sich danach auf ! Warum ? Was mach ich falsch ?

Danke schonmal im Vorhinein smile

Gruss Chris
15.03.2004 11:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moson moson ist männlich
myCSharp.de-Mitglied

avatar-7.jpg


Dabei seit: 20.11.2003
Beiträge: 151
Entwicklungsumgebung: Visual Studio 2015 Community


moson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Haste schon versucht das in eine Methode zu schreiben und den try-catch Block beim Aufruf der Methode verwendest? Etwa so:

C#-Code:
public void conncten()
{
   //Client öffnen
   TcpClient client = new TcpClient(arr_PCInvent[1], int_port);

   //Text in Byte umwandeln
   Byte[] data = System.Text.Encoding.ASCII.GetBytes(str_AusgabeText);

   //Netzwerkstream öffnen
   NetworkStream stream = client.GetStream();
   //Datensatz schreiben
   stream.Write(data, 0, data.Length);

   //Client schließen
   client.Close();
}
................................................................

private void button1_Click(object sender, System.EventArgs e)
    {
        try
        {
        connecten();
        }
        catch(Exception)
        {
        MessageBox.Show("Dein Chatpartner ist nicht bereit, oder du hast die falsche bzw. eine ungültige IP Adresse angegeben", "Fehler 02");
        }
               }

Musste dann beim Methodenaufruf eventuell noch die IP und den Port übergeben...
15.03.2004 14:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Noodles
myCSharp.de-Poweruser/ Experte

Dabei seit: 08.02.2004
Beiträge: 4.644
Herkunft: Leipzig


Noodles ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

TcpClient.GetStream-Methode:

Zitat:
Zuerst muss die Connect-Methode aufgerufen werden, sonst löst die GetStream-Methode eine InvalidOperationException aus.

Liegt es vielleicht daran?
15.03.2004 14:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Noodles
myCSharp.de-Poweruser/ Experte

Dabei seit: 08.02.2004
Beiträge: 4.644
Herkunft: Leipzig


Noodles ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Noch etwas, die Client-Verbindung würde ich nicht im try - Block schließen. Was passiert, wenn Du die Verbindung öffnest und danach erst ein Exception auslöst? Dann wird nämlich Deine Verbindung nicht geschlossen. Dafür gibt es den finally Block, der immer durchlaufen wird.
15.03.2004 14:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rockynl
myCSharp.de-Mitglied

Dabei seit: 10.02.2004
Beiträge: 53

Themenstarter Thema begonnen von rockynl

rockynl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@ moson: Er hängt sich zumindest nicht mehr auf smile
@ Noodles: Der Fehler entsteht schon in der Zeile

C#-Code:
TcpClient client = new TcpClient(arr_PCInvent[1], int_port);

Kann also nicht an der TcpClient.GetStream-Methode liegen.

Das zweite was du gerade angesprochen hast wollte ich ja eigentlich auch machen, bekomm das aber irgendwie nicht hin. Wenn ich client.Close(); in den finally Block schreibe kommt immer der Fehler "Typ oder Namespace 'client' konnte nicht gefunden werden...." Mach ich da was bei der Instanzierung des Objektes falsch ?
15.03.2004 15:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
zeus zeus ist männlich
myCSharp.de-Mitglied

avatar-8.jpg


Dabei seit: 27.10.2003
Beiträge: 446
Entwicklungsumgebung: SharpDevelop
Herkunft: /home


zeus ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

das gehört aber eindeutig nach Netzwerk --> verschoben.
15.03.2004 15:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Noodles
myCSharp.de-Poweruser/ Experte

Dabei seit: 08.02.2004
Beiträge: 4.644
Herkunft: Leipzig


Noodles ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Guckst Du  hier. Ich denke, dass könnte Dir helfen.
15.03.2004 15:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rockynl
myCSharp.de-Mitglied

Dabei seit: 10.02.2004
Beiträge: 53

Themenstarter Thema begonnen von rockynl

rockynl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Original von zeus
Hi,

das gehört aber eindeutig nach Netzwerk --> verschoben.

Hast Recht, hab nicht aufgepasst ... Sorry
15.03.2004 15:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moson moson ist männlich
myCSharp.de-Mitglied

avatar-7.jpg


Dabei seit: 20.11.2003
Beiträge: 151
Entwicklungsumgebung: Visual Studio 2015 Community


moson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Original von Noodles
Noch etwas, die Client-Verbindung würde ich nicht im try - Block schließen. Was passiert, wenn Du die Verbindung öffnest und danach erst ein Exception auslöst? Dann wird nämlich Deine Verbindung nicht geschlossen. Dafür gibt es den finally Block, der immer durchlaufen wird.

Hier wird die Verbindung aufgebaut:

C#-Code:
TcpClient client = new TcpClient(arr_PCInvent[1], int_port);

Das nach dem Verbindungsaufbau noch ne Exception ausgelöst wird halte ich für unwarscheinlich...
Da bei ihm garkeine Verbindung aufgebaut werden kann, so braucht er ja auch keine zu Closen...

Zitat:
Original von Noodles
TcpClient.GetStream-Methode:
Zitat:
Zuerst muss die Connect-Methode aufgerufen werden, sonst löst die GetStream-Methode eine InvalidOperationException aus.



Liegt es vielleicht daran

Die Connect Methode brauchste garnicht...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von moson am 15.03.2004 16:16.

15.03.2004 16:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Noodles
myCSharp.de-Poweruser/ Experte

Dabei seit: 08.02.2004
Beiträge: 4.644
Herkunft: Leipzig


Noodles ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Original von moson
Das nach dem Verbindungsaufbau noch ne Exception ausgelöst wird halte ich für unwarscheinlich...
Da bei ihm garkeine Verbindung aufgebaut werden kann, so braucht er ja auch keine zu Closen...

Ich meinte das im Allgemeinen. Und wenn Du da der Meinung bist, dass es unwahrscheinlich ist, dann kannst Du es ja ignorieren.

Zitat:
Original von moson

Zitat:
Original von Noodles
TcpClient.GetStream-Methode:
Zitat:
Zuerst muss die Connect-Methode aufgerufen werden, sonst löst die GetStream-Methode eine InvalidOperationException aus.

Liegt es vielleicht daran

Die Connect Methode brauchste garnicht...

Hab ich dem Tutorial auch gesehen, aber mein Zitat ist aus der Framework SDK Doku.
15.03.2004 16:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moson moson ist männlich
myCSharp.de-Mitglied

avatar-7.jpg


Dabei seit: 20.11.2003
Beiträge: 151
Entwicklungsumgebung: Visual Studio 2015 Community


moson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok, ich wollte dich nicht persönlich angreifen...
15.03.2004 17:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rockynl
myCSharp.de-Mitglied

Dabei seit: 10.02.2004
Beiträge: 53

Themenstarter Thema begonnen von rockynl

rockynl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Estmal vielen Dank für eure Antworten.

@ moson: Ich denke schon das es wichtig ist die close-Methode in den Finally-Block zu schreiben, falls die Verbindung mal aufgebaut wird und der Stream danach abbricht, wobei du bei meinem jetzigen Problem natürlich Recht hast...
@ Noodles: Danke für den Link, hab aber nichts zu dem try-catch-finally-Problem gefunden unglücklich

@ All: Kann man irgendwie betimmen, wie lange versucht werden soll eine Verbindung aufzubauen ???
16.03.2004 08:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rockynl
myCSharp.de-Mitglied

Dabei seit: 10.02.2004
Beiträge: 53

Themenstarter Thema begonnen von rockynl

rockynl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Strebe da noch ne andere Überlegung an...

Wäre es sinnvoll einen ping an den Server zu schicken und bei Antwort erst eine Verbindung herzustellen ?

Wenn ja kann mir dann jemand sagen wie ich das mache und die Antwort auswerte ???

Andere Vorschläge sind natürlich auch sehr willkommen großes Grinsen
16.03.2004 09:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Noodles
myCSharp.de-Poweruser/ Experte

Dabei seit: 08.02.2004
Beiträge: 4.644
Herkunft: Leipzig


Noodles ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Original von rockynl
@ Noodles: Danke für den Link, hab aber nichts zu dem try-catch-finally-Problem gefunden unglücklich

Man könnte es so tun:

C#-Code:
TcpClient client = new TcpClient();
string host = ""; int port = 000;
try
{
    client.Connect(host, port);
    ...
}
catch
{
    //Fehlerbehandlung
    ...
}
finally
{
    client.Close();
}

Zitat:
Original von rockynl
@ All: Kann man irgendwie betimmen, wie lange versucht werden soll eine Verbindung aufzubauen ???

Schau Dir mal die ReceiveTimeout Methode der TcpClient Klasse, vielleicht löst die ja Dein Problem.

Zitat:
Original von moson
Ok, ich wollte dich nicht persönlich angreifen...

Hast Du doch auch nicht. großes Grinsen
16.03.2004 12:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rockynl
myCSharp.de-Mitglied

Dabei seit: 10.02.2004
Beiträge: 53

Themenstarter Thema begonnen von rockynl

rockynl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke, weis jetzt auch wie das mit der Pinganfrage geht...

C#-Code:
Process Verbindungstest = new Process();
Verbindungstest.StartInfo.FileName = "ping.exe";
Verbindungstest.StartInfo.Arguments = arr_PCInvent[1];
Verbindungstest.StartInfo.UseShellExecute = false;
Verbindungstest.StartInfo.RedirectStandardOutput = true;
Verbindungstest.StartInfo.CreateNoWindow = true;
Verbindungstest.Start();

string str_Ergebnis = Verbindungstest.StandardOutput.ReadToEnd();

Verbindungstest.WaitForExit();

In der Variablen str_Ergebnis steht dann die Ausgabe von dem Pingbefehl...

Weis nicht ob es die beste Lösung ist, aber es funktioniert ...
Verbesserungsvorschläge sind willkommen smile
16.03.2004 14:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Noodles
myCSharp.de-Poweruser/ Experte

Dabei seit: 08.02.2004
Beiträge: 4.644
Herkunft: Leipzig


Noodles ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe jetzt noch ein sauberes Aufräumen (meiner Meinung nach) gefunden:

C#-Code:
System.Net.Sockets.TcpClient tc = null;
try
{
    tc.Connect("Host", 00);
}
catch
{
    // ...
}
finally
{
    if(tc != null)
        tc.Close();
}
24.03.2004 16:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 16 Jahre.
Der letzte Beitrag ist älter als 16 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.09.2020 05:47