# "ENTER" über Winsock senden?



## daDom (25. Mai 2004)

Hi Jungs.

Ich muss über ein Winsock-Control einen Text senden und diesen mti Enter bestätigen...
Text senden ist ja kein Problem (Winsock1.Senddata Text) aber wie soll ich den eingegebenen bzw. gesendeten Text bestätigen?


----------



## Jiekas (25. Mai 2004)

Also ich weiß überhaupt nicht, ob ich überhaupt gepeilt habe, wo dein Problem liegt, aber hilft dir das weiter?


```
Winsock1.Senddata Text & vbCrLf
```


----------



## Kriskra (25. Mai 2004)

@Jiekas: Das wird wohl nicht gehen für seine anforderung, da dein befehl ist nur für zeilenumbrüche...

Mit Sendkeys kann man ja nur tasten wie A oder B etc. verschicken,
aber es gibt ein Turt auf vbarchiv.net, dort gibts ne SendKeysEx anweisung beidem man auch nicht sichtbare tasten senden kann. (Wie Enter, Alt, Strg etc.)

Hier 

Hoffe das hilft dir weiter!

Mfg
Kriskra


----------



## daDom (25. Mai 2004)

Hi!

Klappt beides nicht...  

Ich dachte, es ginge vielleicht mit "vbKeyReturn", aber tuts auch net  

Gibts da nicht noch andere Möglichkeiten, über Winsock ein Enter-tastendruck zu simulieren?


----------



## Retlaw (25. Mai 2004)

Ich nehm an du beziehst das auf das Problem aus deinem Telnet-Thread.
Mit SendKeys oder der von Kriskra genannten Methode sendet man Tastenanschläge an laufende Programme mit grafischer Oberfläche.
vbCrLf ist eine Konstante für Zeilenumbrüche unter Windows.
vbKeyReturn ist eine Konstante um die gedrückte Taste in KeyEvents zu ermitteln.
Wenn du ein Programm schreiben willst das Daten übers Netzwerk sendet wie z.B. Telnet dann kommts nicht darauf an das Drücken der "Enter-Taste" zu senden sondern das was der Telnet-Client machen würde wenn du diese Taste drückst.


----------



## daDom (26. Mai 2004)

> Wenn du ein Programm schreiben willst das Daten übers Netzwerk sendet wie z.B. Telnet dann kommts nicht darauf an das Drücken der "Enter-Taste" zu senden sondern das was der Telnet-Client machen würde wenn du diese Taste drückst.


Achso....
Stimmt, irgendwie logisch.

Bei dir hört es sich so an, als wüsstest du schon, wie das funktioniert.... ?!  
Hast du ne Idee?


Könnte man das ganze nicht auch mit einfachem Aufrufen der Eingabeaufforderung lösen?
Oder gibts diese Eingabeaufforderung auch als integrierbares Steuerelement?


----------



## Retlaw (27. Mai 2004)

Was willst du denn mit der Eingabeaufforderung? Du musst die Daten nur so übers Winsock senden das der Empfänger denkt du bist ein Telnet-Client.

Was du brauchst ist eine Dokumentation über das was Telnet macht.
Oder Google mal nach Beispielen, habs mir noch nicht angeschaut aber vielleicht ist da was für dich dabei: www.codearchive.com (unter search Telnet eingeben)

/Edit: oder hier gibts ein komplettes Beispiel.


----------



## daDom (27. Mai 2004)

Das komplette Beispiel hatte ich die letzen Tage schon mal bei meiner Suche gefunden....
Ich schau aber noch mal rein - vielleicht finde ich ja doch noch was....

Aber über codearchive bin ich auch nicht fündig geworden...

Ich glaube, ich muss die materie von Telnet erst mal verstehen(d.h. was Telnet macht, wenn Enter gedrückt wurde)


----------



## daDom (27. Mai 2004)

So, um das ganze etwas verständlicher werden zu lassen:

--> Beim Formload verbindet das Proggy;
---> Winsock erhält Daten, schreibt diese in die textbox.
----> Die beiden Buttons "username-" und "pwd senden" senden entsprechende Testdaten.
(Diese sind nicht weiter von Belang - wichtig ist der Aspekt, das nach der bestätigung auf jeden Fall eine Bestätigung kommen muss. Entweder "Login incorrect" oder eben das Gegenteil.)
Ihr könnt auch versuchen über die DOS-Console manuell zu connecten.
Als Vergleich so(...)


----------



## Kriskra (27. Mai 2004)

Also bei mir hat das mit meiner möglichkeit geklappt als ich mal was mit winsock gemacht hab


----------



## daDom (28. Mai 2004)

> _Original geschrieben von Kriskra _
> *Also bei mir hat das mit meiner möglichkeit geklappt als ich mal was mit winsock gemacht hab *



Aber hast du die Befehle an einen anderen PC geschickt, wo es sichtbar war, das die Daten ankamen?
Ich muss die Daten ja senden, ohen das ich deren wirkliche Auswirkung sehe  

Aber ich check mal deinen Code aus


----------



## Kriskra (29. Mai 2004)

Hab mir jetzt genau nochmal dein problem angesehen! Ich kapiers nicht ganz, warum willste enter drücken beim Empfangen, willste den Firewall austricksen oder was? Weil empfangen tuts ja eigentlich auch ohne bestätigung


----------



## daDom (29. Mai 2004)

> _Original geschrieben von Kriskra _
> *Hab mir jetzt genau nochmal dein problem angesehen! Ich kapiers nicht ganz, warum willste enter drücken beim Empfangen, willste den Firewall austricksen oder was? Weil empfangen tuts ja eigentlich auch ohne bestätigung *


Weil die Benutzerdaten , die ich sende, bestätigt werden müssen.
Wenn du das ganze mal im Commander ausprobierst, dann bekommst du nach Eingabe des PWD und USERNAME ne Meldung.
Die muss VB auch bekommen.

Und das geht doch nur mit Enter simulieren, oder?


----------



## Kriskra (29. Mai 2004)

Okay mal so würd ichs machen:
Client:

Winsock1.Senddata "[ENTER]"

Server:
Dim empfangen as string

empfangen = Winsock1.GetData

If empfangen = "[ENTER]" Then
SendKeysEx "{ENTER}"
Else
Text1.Text = empfangen 'oder irgentwas anderes hald
End If

In nem Modul das Script von vbarchiv...

So müsste es eigentlich klappen...

Mfg
Kriskra


----------



## Akita (4. Juni 2004)

Ich hab mal ein kleines Teil geschrieben, um zu testen ob ein SMTP offen ist, weil ich zu faul war, jedesmal per Telnet reinzuklopfen. Da bekam ich nur Rückmeldung, wenn ich an die jeweiligen Kommandos entweder *& Chr(10) & Chr(13)*  oder eben *vbCrLf* anhängte. Aber wie hier schon jemand schrieb, hängt es davon ab, was der andere Rechner erwartet


----------



## daDom (4. Juni 2004)

"& Chr(10) & Chr(13)"
Wofür steht das "Chr(10)"?

"13" ist ja klar == Enter

Gruß
daDom


----------



## Retlaw (4. Juni 2004)

Die ASCII-Zeichen 10 und 13 bilden zusammen den Zeilenumbruch in Dateien unter Windows, vbCrLf ist nichts anderes:
vb = VB-Konstante
Cr = carriage return (Wagenrücklauf, kommt von der Schreibmaschine)
Lf = line feed (neue Zeile)

Die Taste "Enter" wird natürlich nur durch ein Zeichen dargestellt.


----------



## daDom (4. Juni 2004)

Hmm - aber warum 10&13 zusammen?
Vielleichts klappts ja - ich probiers gleich mal.


----------



## Retlaw (4. Juni 2004)

> _Original geschrieben von daDom _
> *Hmm - aber warum 10&13 zusammen?
> ...*


Weil man auf einer Schreibmaschine den Wagen zurück fahren *und* die Walze eine Zeile weiterdrehen musste und das von Microsoft so abgekupfert wurde  
Unter Unix/Linux z.B. besteht der Zeilenumbruch in einer Datei nur aus einem Zeichen.

Ob dir das aber weiterhilft weiß ich nicht.

Zu deinem Problem:
Hast du eine Dokumentation oder den Quelltext von dem Programm an das du die Daten senden willst? Falls ja kannst du da nachlesen was erwartet wird um Daten zu "bestätigen". Falls es sich um einen Telnetserver handelt sollte es dafür genug Open-Source geben.


----------

