steinadler Geschrieben 17. Mai 2006 Teilen Geschrieben 17. Mai 2006 Hallo, ich habe in meiner Anwendung ein Socket definiert. Laut MSDN kann ich, zu meinem ClientSocket eine leere Zeichenfolge senden (also 0 Byte). Bei mir funktioniert das jedoch nicht. Also jedenfalls kommt beim Client nichts an... Gruß Steinadler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 17. Mai 2006 Teilen Geschrieben 17. Mai 2006 Ist das immer noch dasselbe Problem wie hier? Bei mir funktioniert das jedoch nicht. Also jedenfalls kommt beim Client nichts an...Du schickst 0 Bytes. Da kann nichts ankommen. Das ist ja auch nicht Sinn der Sache. Das Senden von 0 Bytes aktualisiert nur das Connected-Property. Bei mir funktioniert das prima. Zeig doch mal den Code. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
steinadler Geschrieben 17. Mai 2006 Autor Teilen Geschrieben 17. Mai 2006 Genau das Problem ist das. Aber trotzdem, wenn ich mit nem Sniffer nachschaue, müsste da nicht ein leeres IP-Paket ankommen? also nur Header-Informationen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 17. Mai 2006 Teilen Geschrieben 17. Mai 2006 Ich wüsste nicht, wieso. Und selbst wenn - was bringt es dir? Der Zweck ist doch nicht der, ein leeres Paket zu schicken, sondern das Connected-Property zu aktualisieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
steinadler Geschrieben 17. Mai 2006 Autor Teilen Geschrieben 17. Mai 2006 Hier mal mein Code: public bool IsConnected { get { try { byte[] buffer = new byte[1]; m_oTelnetSocket.Blocking = false; m_oTelnetSocket.Send(buffer, 0, 0, 0); return m_oTelnetSocket.Connected; } catch { return false; } } } Das hier ist eine Eigenschaft meiner ServerKlasse. Diese wird von dem HauptThread in Abständen aufgerufen. Müsste doch gehen, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 17. Mai 2006 Teilen Geschrieben 17. Mai 2006 Ich würde den Sendetest nur machen, wenn Connected true ist, aber auch so sollte es funktionieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
steinadler Geschrieben 17. Mai 2006 Autor Teilen Geschrieben 17. Mai 2006 Hab mal was zusammengebaut. Normalerweise müsste sich doch die Anwendung fehlerfrei beenden, wenn Das Socket auf dem Client geschlossen wurde, oder? (Das Fenster dürfte praktisch nie angezeigt werden). Kann das mal jemand so testen?? using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Net.Sockets; using System.Net; namespace TestAppNet { /// <summary> /// Zusammenfassung für Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; IPEndPoint m_oLocalEndPoint = null; Socket m_oListenSocket = null; Socket m_oTelnetSocket = null; public Form1() { InitializeComponent(); m_oLocalEndPoint = new IPEndPoint(IPAddress.Parse("192.168.232.233"), 23); m_oListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); m_oListenSocket.Bind(m_oLocalEndPoint); m_oListenSocket.Listen(2); m_oTelnetSocket = m_oListenSocket.Accept(); while(m_oTelnetSocket.Connected) { m_oTelnetSocket.Send(new byte[1], 0, 0, 0); } } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Vom Windows Form-Designer generierter Code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.Size = new System.Drawing.Size(300,300); this.Text = "Form1"; } #endregion [STAThread] static void Main() { Application.Run(new Form1()); } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 17. Mai 2006 Teilen Geschrieben 17. Mai 2006 Eigenartig. Mit einem C#-Programm als Client funktioniert das, mit telnet beispielsweise allerdings nicht. Bau die Warteschleife mal so: while (!m_oTelnetSocket.Poll(1, SelectMode.SelectRead) || 0 != m_oTelnetSocket.Available) { } [/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
steinadler Geschrieben 18. Mai 2006 Autor Teilen Geschrieben 18. Mai 2006 Ist wirklich etwas komisch. Trotzdem danke. Funktioniert ausgezeichnet mit deiner Variante. Geht diese denn mit einem C#-Client ebenfalls? Vielleicht hätte ich dazuschreiben sollen, dass ich nen Telnet-Client benutze... Gruß Steinadler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Mai 2006 Teilen Geschrieben 18. Mai 2006 Geht diese denn mit einem C#-Client ebenfalls?Bei mir geht's jedenfalls. Vielleicht hätte ich dazuschreiben sollen, dass ich nen Telnet-Client benutze...Je mehr Informationen du über den Fehler bzw. die Umstände, unter denen er auftritt, liefern kannst, desto besser. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
steinadler Geschrieben 18. Mai 2006 Autor Teilen Geschrieben 18. Mai 2006 Wenn ich die Pakete mitsniffere, dann sendet der TelnetClient beim Beenden ein Leeres TCP-Paket mit einem Flag, welches sich FIN nennt. Vielleicht könnte man diese Flags ja auch irgendwie abfangen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.