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
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Netzwerktechnologien » Telnet: Datenpaket unvollständig?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Telnet: Datenpaket unvollständig?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
myst3rium myst3rium ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.04.2012
Beiträge: 2
Entwicklungsumgebung: VS 11 (C#)
Herkunft: Stuttgart


myst3rium ist offline

Telnet: Datenpaket unvollständig?

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

Hallo,

ich habe ein kleines (?) Problem mit Telnet, wobei nicht einmal Google mir helfen wollte.
Darum habe ich mich (ja, bin neu hier) kurzerhand registriert, um
evtl. auf einen Lösungsansatz zu kommen.

Folgende Situation:

Ich habe aktuell ein Programm ("Programm A"), welches Daten über einen offenen Port bereitstellt.
Diese Daten lassen sich via Telnet auch relativ gut auslesen.

Wird allerdings die Datenmenge zu groß, wird (scheinbar) nur ein Teil der Daten übertragen.

Während der Laufzeit von "Programm A" werden neue Daten gesammelt und ebenfalls
über Telnet "verschickt". Interessanter weise kommen die dann auch wieder an!

Warum nur scheinbar?

Nun. Aktuell lausche ich mit einem TCP-Client den Port ab. Dabei fehlen aber immer ein paar Datensätze. Auch über die Windows-Konsole: telnet <<IP>> <<PORT>>
Hier fehlen ebenfalls immer einige Datensätze.

Greife ich nun allerdings über PuTTY -> Telnet zu und verändere ein paar Einstellungen
(-> "Lines of Scrollback": 200 -> 2000) so werden alle Datensätze angezeigt.


Daraus folgere ich mal, dass ich nur eine bestimmte Datenmenge gesendet bekomme und
in meinem auslesenden Programm quasi den nächsten Datensatz anfordern muss.

FRAGE: Wie bringe ich meinem C#-Programm bei, dass es den nächsten Datensatz holen soll?

CODE:

C#-Code:
// Neue Connection aufbauen
Listener = new TcpClient();
Listener.Connect(Host, Port);
NetworkStream ns = Listener.GetStream();

// Welcome-Message auslesen
// Passwort senden (LogIn)

while (true)
{
    // Daten empfangen
    StringBuilder sb = new StringBuilder(string.Empty);
    while (ns.CanRead && ns.DataAvailable)
    {
        sb.AppendFormat("{0}", (char)ns.ReadByte());
    }

    string result = sb.ToString(); // <- Hier fehlen aber ein paar Datensätze

    Thread.Sleep(100);
}

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von myst3rium am 29.04.2012 15:13.

29.04.2012 02:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt Abt ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 5.312


Abt ist offline

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

Einfach geraten: vielleicht ist die Schleife zu schnell und daher ist CanRead und DataAvailable false?!

Hast Du Dir mal  [FAQ] TcpClient: einfaches Beispiel angeschaut?
29.04.2012 13:13 Beiträge des Benutzers | zu Buddylist hinzufügen
myst3rium myst3rium ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.04.2012
Beiträge: 2
Entwicklungsumgebung: VS 11 (C#)
Herkunft: Stuttgart

Themenstarter Thema begonnen von myst3rium

myst3rium ist offline

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

Wenn du auf das

C#-Code:
Thread.Sleep(x00);

in der Schleife raus willst, das ist drin.
(Habe auch spasshalber mal n Thread.Sleep in meine Read-Methode gepackt, was auch nix ändert)
(Habe ich nur vergessen hier zu posten)
Es ist ja nicht so, dass ich gar nix bekomme.

Ich versuche es nochmal zu erklären.
Nehmen wir an, ich habe eine Liste von (alten) Ereignissen:

Ereignis1
Ereingis2
Ereignis3
Ereignis4
Ereingis5
Ereignis6

Dann bekomme ich allerdings nur einen Teil der Liste zugeschickt. z.B. Ereignis 1-4

Kommen nun neue Ereignisse in die Liste,
werden mir auch diese korrekt übermittelt. z.B. Ereignis 7 wird protokolliert -> Telnet sendet mir Ereignis 7.

Wie schon beschrieben schafft es PuTTY aber irgendwie dies zu umgehen, und das brauche ich auch für meine Anwendung.

Was ich gefunden habe, waren sog. Telnet-Befehle: GA (Go Ahead), etc.
was aber seltsame Effekte ausgelöst hat, weil ich da noch nicht ganz durchsteige.
29.04.2012 15:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
mogel mogel ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3347.jpg


Dabei seit: 05.08.2010
Beiträge: 153
Entwicklungsumgebung: Hamster im Laufrad


mogel ist offline

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

Moin,

AFAIR wird der Stream noch irgendwo gepuffert vor dem Senden.

C#-Code:
            this.__socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);

Zitat:
Was ich gefunden habe, waren sog. Telnet-Befehle: GA (Go Ahead), etc.
was aber seltsame Effekte ausgelöst hat, weil ich da noch nicht ganz durchsteige.

dann lieber  wirkllich Telnet implementieren, nur weil Du über Telnet die Ereignisse siehst ist es noch kein Telnet ;)

glaube das wars, mogel

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von mogel am 01.05.2012 21:37.

01.05.2012 21:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Der letzte Beitrag ist älter als 2 Jahre.
Antwort erstellen


© Copyright 2003-2014 myCSharp.de-Team. Alle Rechte vorbehalten. 22.07.2014 17:03