Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
zettelgirl
Anmeldungsdatum: 27.05.2007 Beiträge: 38
|
Verfasst am: 27.05.2007, 20:20 Titel: Winsock Buffer leeren? |
|
|
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 |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.05.2007, 21:05 Titel: |
|
|
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 |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.05.2007, 21:26 Titel: |
|
|
..und zum Zerlegen der Strings kannste ja SubStr() benutzen
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 |
|
|
zettelgirl
Anmeldungsdatum: 27.05.2007 Beiträge: 38
|
Verfasst am: 27.05.2007, 22:24 Titel: |
|
|
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 |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 27.05.2007, 22:44 Titel: |
|
|
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 |
|
|
zettelgirl
Anmeldungsdatum: 27.05.2007 Beiträge: 38
|
Verfasst am: 02.06.2007, 16:40 Titel: |
|
|
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 |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 02.06.2007, 17:27 Titel: |
|
|
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 |
|
|
zettelgirl
Anmeldungsdatum: 27.05.2007 Beiträge: 38
|
Verfasst am: 02.06.2007, 19:09 Titel: |
|
|
Ah, natürlich. Warum bin ich dadrauf nicht gekommen. Danke danke .
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 . |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 02.06.2007, 20:39 Titel: |
|
|
Klar ist das möglich, wurde aber imho schonmal hier irgendwo abehandelt. _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
zettelgirl
Anmeldungsdatum: 27.05.2007 Beiträge: 38
|
Verfasst am: 02.06.2007, 20:54 Titel: |
|
|
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 |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 02.06.2007, 21:16 Titel: |
|
|
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 |
|
|
zettelgirl
Anmeldungsdatum: 27.05.2007 Beiträge: 38
|
Verfasst am: 02.06.2007, 23:17 Titel: |
|
|
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 |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
|
zettelgirl
Anmeldungsdatum: 27.05.2007 Beiträge: 38
|
|
Nach oben |
|
|
|