Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Winsock Buffer leeren?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
zettelgirl



Anmeldungsdatum: 27.05.2007
Beiträge: 38

BeitragVerfasst am: 27.05.2007, 20:20    Titel: Winsock Buffer leeren? Antworten mit Zitat

Hallo,

ich hoffe diese Frage gab es nicht bereits, jedenfalls hab ich in der Suche nichts gefunden.

Ich spiele momentan etwas mit Winsock rum und möchte mir nen kleinen IRC Bot basteln. Klappt auch soweit super, aber ich hänge an der stelle mit PING/PONG.

Der Server sendet mir eine PING Nachricht mit einem Code als Parameter, denselben Code muss ich mit PONG wieder zurückschicken.

Da der Code immer an der selben Stelle steht dachte ich mir ich hole mir das mit mid$ raus, aber das geht eben nicht. Der Buffer wir nicht gelöscht wenn ich wieder abfrage. Der gesamte Buffer sieht dann so aus:
Code:

NOTICE ruffruff :*** If you are having problems connecting due to ping timeouts,
 please type /notice FFE907BF nospoof now.
PING :FFE907BF


Variable(recvBuffer) leeren bringt nichts, da FreeBasic bzw. Winsock das intern macht. Nun meine Frage: Wie leere ich diesen Buffer?

Bei PING/PONG ist es ja noch nich so schlimm, passe ich halt die Parameter von mid$ soweit an. Aber mir gefällt der Gedanke nicht das der Buffer unaufhörlich immer größer und größer wird.

EDIT: Zwischen "now" und "PING" ist ein bisschen Code und ne extra Abfrage, ich möchte halt das recvBuffer dann NUR die Zeile mit "PING" enthält.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.05.2007, 21:05    Titel: Antworten mit Zitat

hä? also eigentlich ist nach empfangenebytes=recv(ergebnispointer oder ka wie das war, maxlen) das was du empfangen hast weg. die sache is nur wenn der server dir drei zeilen schickt und du die dann alle auf einmal holst hast du halt drei zeilen in einem string. einfach an chr(13,10) auseinanderschneiden und sequentiell bearbeiten, oder gleich immer nur ein zeichen empfangen (etwas mehr arbeit für winsock) und komplett einzeln abarbeiten, also empfangen, empfangen, empfangen bis die letzten beiden bytes 13 und 10 waren und danach die gesamte zeile (ohne die letzten beiden zeichen) verarbeiten und anschließend wieder löschen. eigentlich gibts da keine probleme.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.05.2007, 21:26    Titel: Antworten mit Zitat

..und zum Zerlegen der Strings kannste ja SubStr() benutzen grinsen
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
zettelgirl



Anmeldungsdatum: 27.05.2007
Beiträge: 38

BeitragVerfasst am: 27.05.2007, 22:24    Titel: Antworten mit Zitat

Ah, entschuldigung. Das war ein reiner Denkfehler. Der Server sendet das natürlich zusammen, sorry.

Bevor ich hier einen neuen Thread aufmache: Weiß jemand ganz rein zufällig wie man den Windows Benutzernamen auslesen kann? Auch dazu hat die Suche nichts gesagt, auch wenn ich mich darann erinnern kann mal was dazu gelesen zu haben...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.05.2007, 22:44    Titel: Antworten mit Zitat

Meinst du den registrierten Benutzer? Das ist ein String, der in der Registry steht..
Und wie Strings ausgelesen werden steht hier
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
zettelgirl



Anmeldungsdatum: 27.05.2007
Beiträge: 38

BeitragVerfasst am: 02.06.2007, 16:40    Titel: Antworten mit Zitat

Hallo,

danke erstmal für die Antwort, aber die Methode is ja doch etwas umständlich. Gibt es keine einfache WinAPI Funktion die den momentan eingeloggten User(oder genauer: Der User der das Programm gestartet hat) ausgibt?

Oder vielleicht alternativ den Rechnernamen? Das würde auch schon reichen, ich brauche nur etwas um nen bisschen trennen zu können.

Danke erstmal zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 02.06.2007, 17:27    Titel: Antworten mit Zitat

Hallo!

Das geht zwar mit WinAPI-Funktionen, aber das Auslesen von Umgebungsvariablen ist einfacher:
Code:
PRINT "Angemeldeter Benutzer: "; ENVIRON("USERNAME")
PRINT "Arbeitsstation: "; ENVIRON("COMPUTERNAME")
PRINT "Anmeldeserver: "; ENVIRON("LOGONSERVER")
SLEEP: END

Da stehen lauter interessante Sachen drin. Beispiel von einem meiner PCs:
Code:
COMPUTERNAME=SEBASTIAN-6
ComSpec=C:\WINNT\system32\cmd.exe
HOMEDRIVE=C:
HOMEPATH=\
LANG=de
LOGONSERVER=\\MAILSERVER
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:\WINNT\system32\os2\dll;
Path=E:\php5\;C:\WINNT\system32;C:\WINNT;C:\Programme\Gemeinsame Dateien\GTK\2.0\bin;E:\mysql50\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PHPRC=E:\php5\
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 5 Model 4 Stepping 3, GenuineIntel
PROCESSOR_LEVEL=5
PROCESSOR_REVISION=0403
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=e:\TEMP
TMP=e:\TEMP
USERDOMAIN=SSTEINER
USERNAME=ssteiner
USERPROFILE=C:\WINNT\Profiles\ssteiner
windir=C:\WINNT

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
zettelgirl



Anmeldungsdatum: 27.05.2007
Beiträge: 38

BeitragVerfasst am: 02.06.2007, 19:09    Titel: Antworten mit Zitat

Ah, natürlich. Warum bin ich dadrauf nicht gekommen. Danke danke happy.

Eine wirklich allerletzte Frage noch(wenn das okay is): Mein Programm ist ja momentan ein cmd Fenster. Jetzt möchte ich das ganze aber nur als Symbol in der Taskleiste haben. Ist das möglich?

EDIT: Sorry, ich meine Symbol im Systray.

Vielen Dank im vorraus zwinkern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 02.06.2007, 20:39    Titel: Antworten mit Zitat

Klar ist das möglich, wurde aber imho schonmal hier irgendwo abehandelt. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
zettelgirl



Anmeldungsdatum: 27.05.2007
Beiträge: 38

BeitragVerfasst am: 02.06.2007, 20:54    Titel: Antworten mit Zitat

Ah, natürlich. Danach hab ich natürlich nicht gesucht. Ich habe jetzt diesen Code genommen:

http://freebasic.de/fbnp/index.php?view=341

Aber FreeBasic kennt den Typ NOTIFYICONDATA nicht. Ich bin jetzt mit den innereien von FreeBasic nicht so vertraut, an was könnte das liegen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 02.06.2007, 21:16    Titel: Antworten mit Zitat

du musst als compile-option -i inc angeben, oder sicherstellen, dass sich alle .bi dateien im fbc verzeichnis befinden...

/€dit:
bei mir (v.0.18 CVS) gibts keinen fehler ...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
zettelgirl



Anmeldungsdatum: 27.05.2007
Beiträge: 38

BeitragVerfasst am: 02.06.2007, 23:17    Titel: Antworten mit Zitat

Okay, ich hab jetzt ne 0.18 CVS Build drauf. Aber irgendwie mag mich das Teil nicht :/

Code:

smsbot.bas(462) error 41: Variable not declared, ExtractIcon
hIcon = ExtractIcon(getmodulehandle(0),"C:\Windows\system32\SHELL32.dll",165)
        ^
smsbot.bas(462) warning 12(0): Implicit variable allocation, ExtractIcon
smsbot.bas(462) warning 4(1): Suspicious pointer assignment
smsbot.bas(467) error 25: Invalid data types
With SystrayIcon
     ^
smsbot.bas(468) error 14: Expected identifier, found 'cbSize'
    .cbSize = Len(SystrayIcon)
     ^

Und so weiter...

Irgendwas stimmt da nicht. Hab ich vergessen irgendwas zu includen? Ich hab am anfang:
Code:

#include once "win/winsock.bi"
#define WIN_INCLUDEALL
#include "windows.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 02.06.2007, 23:26    Titel: Antworten mit Zitat

merkwürdig.... verwundert bei mir (0.18 CVS) hatter alles anstandslos gecompt.... hast du die Large Version runtergeladen?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
zettelgirl



Anmeldungsdatum: 27.05.2007
Beiträge: 38

BeitragVerfasst am: 02.06.2007, 23:29    Titel: Antworten mit Zitat

Jap, genauer das Release "Sat, 02 Jun 2007 00:17:20 -0600" von hier: http://ecowles.dyndns.org/fbdu/. Mirror 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz