Ankündigung

Einklappen
Keine Ankündigung bisher.

Einfacher TCP Cleint

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Einfacher TCP Cleint

    hallo,
    ich will einen einfachen TCP Client proggen.
    Momentan habe ich NUR ein Button, der 4 Packte empfangen und 3 Packte senden soll. Später möchte ich eine Nachricht in die Text eintragen und den Button senden betätigen. Zum testen habe ich meinen online FTP Server genommen. Der Grund: Ich muss nicht immer meinen 2ten Laptop hochfahren und einen Test Server starten. Egal wie ich das Blatt wende, ich komme nicht ans Ziel :-(

    [cs]
    public partial class Form1 : Form
    {
    String server = "1.2.3.4"; // ist geändert
    Int32 port = 21;
    TcpClient client;
    NetworkStream stream;
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    client = new TcpClient(server, port);
    stream = client.GetStream();
    meinempfaenger();
    MessageBox.Show("moment");
    var t = Task.Run(async delegate
    {
    meinsender("USER");
    meinempfaenger();
    await Task.Delay(1000);
    return 42;
    });
    t.Wait();
    t = Task.Run(async delegate
    {
    meinsender("PASS");
    meinempfaenger();
    await Task.Delay(1000);
    return 42;
    });
    t.Wait();
    t = Task.Run(async delegate
    {
    meinsender("test3");
    meinempfaenger();
    await Task.Delay(1000);
    return 42;
    });
    t.Wait();
    stream.Close();
    client.Close();
    }
    public async Task meinsender(string nachricht)
    {
    MessageBox.Show(nachricht);
    Byte[] data = System.Text.Encoding.ASCII.GetBytes(nachricht);
    stream.Write(data, 0, data.Length);
    Console.WriteLine("Sent: {0}", nachricht);
    }
    public async Task meinempfaenger()
    {
    Byte[] data = System.Text.Encoding.ASCII.GetBytes("");
    client.ReceiveTimeout = 2000;
    data = new Byte[200];
    Int32 bytes = client.GetStream().Read(data, 0, 200);
    var responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
    Console.WriteLine("Received: {0}", responseData);
    }
    }
    [/cs]


    Vom Ausgabe Fenster:
    HTML-Code:
    Received: 220 FTP Server ready.
    
    "Idee2.vshost.exe" (CLR v4.0.30319: Idee2.vshost.exe): "C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_de_b77a5c561934e089\mscorlib.resources.dll" geladen. Das Modul wurde ohne Symbole erstellt.
    Sent: USER
    "Idee2.vshost.exe" (CLR v4.0.30319: Idee2.vshost.exe): "C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.resources\v4.0_4.0.0.0_de_b77a5c561934e089\System.resources.dll" geladen. Das Modul wurde ohne Symbole erstellt.
    Ausnahme ausgelöst: "System.IO.IOException" in System.dll
    Sent: PASS
    Ausnahme ausgelöst: "System.IO.IOException" in System.dll
    Sent: test3
    Ausnahme ausgelöst: "System.IO.IOException" in System.dll
    Zuletzt geändert von tomycat; 16.03.2019, 20:26.

  • #2
    Hallo!

    Du bekommst offensichtlich eine IOException.

    Benutze try-catch-Blöcke und fange die Exception ab. Dann bekommst du auch mehr Informationen darüber wo die Exception fliegt und warum.

    Siehe auch

    https://docs.microsoft.com/de-de/dot...tch-exceptions

    Kommentar


    • #3
      viele Dank für den Tip:
      die neue Version vom Quellcode:
      HTML-Code:
       public partial class Form1 : Form
          {
              String server = "1.2.3.4";
              Int32 port = 21;
              TcpClient client;
              NetworkStream stream;
              public Form1()
              {
                  InitializeComponent();
              }
      
              private void button1_Click(object sender, EventArgs e)
              {
                  client = new TcpClient(server, port);
                  stream = client.GetStream();
                  meinempfaenger();
                  MessageBox.Show("moment");
                  var t = Task.Run(async delegate
                  {
                      meinsender("USER");
                      meinempfaenger();
                      await Task.Delay(1000);
                      return 42;
                  });
                  t.Wait();
                  t = Task.Run(async delegate
                  {
                      meinsender("PASS");
                      meinempfaenger();
                      await Task.Delay(1000);
                      return 42;
                  });
                  t.Wait();
                  t = Task.Run(async delegate
                  {
                      meinsender("test3");
                      meinempfaenger();
                      await Task.Delay(1000);
                      return 42;
                  });
                  t.Wait();
                  stream.Close();
                  client.Close();
              }
       public async Task meinsender(string nachricht)
              {
                  try
                  {
                      Console.WriteLine("jetzt kommt senden...");
                      Byte[] data = System.Text.Encoding.ASCII.GetBytes(nachricht);
                      stream.Write(data, 0, data.Length);
                      Console.WriteLine("Sent: {0}", nachricht);
                  }
                  catch (FileNotFoundException e)
                  {
                      Console.WriteLine($"The file was not found: '{e}'");
                  }
                  catch (DirectoryNotFoundException e)
                  {
                      Console.WriteLine($"The directory was not found: '{e}'");
                  }
                  catch (IOException e)
                  {
                      Console.WriteLine($"The file could not be opened: '{e}'");
                  }
      
              }
              public async Task meinempfaenger()
              {
                  try
                  {
                      Console.WriteLine("jetzt kommt empfangen...");
                      Byte[] data = System.Text.Encoding.ASCII.GetBytes("");
                      client.ReceiveTimeout = 2000;
                      data = new Byte[200];
                      Int32 bytes = client.GetStream().Read(data, 0, 200);
                      var responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                      Console.WriteLine("Received: {0}", responseData);
      
                  }
                  catch (FileNotFoundException e)
                  {
                      Console.WriteLine($"The file was not found: '{e}'");
                  }
                  catch (DirectoryNotFoundException e)
                  {
                      Console.WriteLine($"The directory was not found: '{e}'");
                  }
                  catch (IOException e)
                  {
                      Console.WriteLine($"The file could not be opened: '{e}'");
                  }
      
              }
      die Ausgabe:
      HTML-Code:
      jetzt kommt empfangen...
      Received: 220 FTP Server ready.
      
      "Idee2.vshost.exe" (CLR v4.0.30319: Idee2.vshost.exe): "C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_de_b77a5c561934e089\mscorlib.resources.dll" geladen. Das Modul wurde ohne Symbole erstellt.
      jetzt kommt senden...
      Sent: USER
      jetzt kommt empfangen...
      "Idee2.vshost.exe" (CLR v4.0.30319: Idee2.vshost.exe): "C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.resources\v4.0_4.0.0.0_de_b77a5c561934e089\System.resources.dll" geladen. Das Modul wurde ohne Symbole erstellt.
      Ausnahme ausgelöst: "System.IO.IOException" in System.dll
      The file could not be opened: 'System.IO.IOException: Von der Übertragungsverbindung können keine Daten gelesen werden: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat. ---> System.Net.Sockets.SocketException: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat
         bei System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
         bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
         --- Ende der internen Ausnahmestapelüberwachung ---
         bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
         bei Idee2.Form1.<meinempfaenger>d__7.MoveNext() in C:\Users\tomycat\documents\visual studio 2015\Projects\Idee2\Idee2\Form1.cs:Zeile 90.'
      jetzt kommt senden...
      Sent: PASS
      jetzt kommt empfangen...
      Ausnahme ausgelöst: "System.IO.IOException" in System.dll
      schnipp....
      habe ein bischen gegoogelt bin aber nicht weiter gekommen.
      So viel habe ich verstanden: Er kann sich verbinden und springt gleich zum empfang über. ->> Received: 220 FTP Server ready. Dann kommt: ...Das Modul wurde ohne Symbole erstellt... Da steige ich nicht ganz druch. OK, dann kommt senden, es kommt keine Beanstandung, der darauffolgende Empfang schlägt fehl ?!
      Wenn ich auf der Konsole ftp meine_ftp_srerver.de schreibe kommt immer blablablal.......user: Seltsam.

      Irgendwo mache ich vielleicht einen Denkfehler ?!


      Kommentar

      Lädt...
      X