Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu Sockets
Also ich bringe mir Scripten über die Help sowie über Vorlagescripts bei, nun bin ich bei den Sockets angelangt, habe auch ein einfach zu verstehendes Script und verstehe auch 90 % davon, dennoch gibt mir manches noch Rätsel auf, hier mal das Beispiel:
alias ver sockclose mirc | sockopen mirc mirc.com 80
on *:sockopen:mirc:{
sockwrite -n $sockname GET / HTTP/1.1
sockwrite -n $sockname Host: mirc.com $+ $str($crlf ,2)
}
on *:sockread:mirc:{
sockread %temp
if (has been released! isin %temp) { echo $color(info) -a Lastest version of mIRC: $gettok(%temp,6,32) }
}
Ist eigendlich alles recht einfach, mit der ersten Zeile schliesst er eine evtl. bestehende Connection über den Socket und öffnet ihn zu mirc.com über den http-port, dann kommt die zweite Zeile, der mit GET usw., also das Get und das HTTP sind dafür da, dass der Socket dafür ausgelegt wird, dass er HTTP-Daten aufnimmt, da bin ich mir aber nicht so sicher.
Ebenfalls weiß ich auch nicht was durch diese Befehltkette im ganzen bewirkt wird: $+ $str($crlf ,2)
Aber das, was mir am meisten Fragen aufgibt ist dies hier: $gettok(%temp,6,32)
Ich weiß nicht wofür die 6 sowie die 32 stehen, ich habe erst überlegt dass dies Positionsangaben für den Speicher %temp sind, kommt aber nicht hin wenn ich mir den Quellcode von mirc.com ansehe, dann hatte ich mir noch andere Sachen überlegt aber ich kann nie darauf wie diese beiden Zahlen zustande kommen.
Ich hoffe ihr könnt mir bei diesen Fragen helfen.
PS.: Gibt es eigendlich nirgends ein deutsches Socket-Tutorial ?
mfg V3n0m-T
$gettok(%temp,6,32)
Füllt zuerst die Varibale '%temp' mit Token, und gibt den 6. Token aus.
Das gleiche wäre in der Art:
/tokensize 32 %temp
var %temp1 $6
echo $6
Die 32 sind glaub ich die Anzahl der Token insgesamt oder so :)
Deutsches Socket Tutorial!? Hm ka, hab die Englishen alle verstanden und kann mit Socket programmieren (:
Danke, das hat mich weitergebracht, jetzt weiß ich, wie es funktioniert :)
Jan Krüger
13.08.2002, 04:35
on *:sockopen:mirc:{
sockwrite -n $sockname GET / HTTP/1.1
sockwrite -n $sockname Host: mirc.com $+ $str($crlf ,2)
}
Sendet eine HTTP-Anfrage an den Server. Das heißt, du teilst dem Server mit, welches Dokument du holen willst. das $+ $str($crlf,2) hängt 2x das Zeilenende (CR+LF, Carriage Return + Line Feed, ASCII 13 & 10) an (eigentlich sollte es laut Standardisierung nur 2x LF senden, aber so sieht der Code nicht aus...? ;)), damit der Server erkennt, dass die Anfrage fertig ist und er die Daten schicken kann.
on *:sockread:mirc:{
sockread %temp
if (has been released! isin %temp) { echo $color(info) -a Lastest version of mIRC: $gettok(%temp,6,32) }
}
guckt nach der ersten Zeile im Dokument, in der "has been released!" steht und holt sich dann das sechste Wort, wobei Worte nur durch Leerzeichen voneinander getrennt sind, alle anderen Zeichen zählen als Buchstaben im Wort (32 ist der ASCII-Code des Leerzeichens).
Das war eigentlich alles, was es an diesem Code zu verstehen gibt. ;)
Original geschrieben von frek\
$gettok(%temp,6,32)
Füllt zuerst die Varibale '%temp' mit Token, und gibt den 6. Token aus.
Das gleiche wäre in der Art:
/tokensize 32 %temp
var %temp1 $6
echo $6
Die 32 sind glaub ich die Anzahl der Token insgesamt oder so :)
Deutsches Socket Tutorial!? Hm ka, hab die Englishen alle verstanden und kann mit Socket programmieren (:
NEIN...
die 32 gibt das trennzeichen an..
32 ist ein leerzeichen.. kannst du schnell nachprüfen inedm du ALT hälst und dabei auf dem nummernblock die zahl 3 2 tippst und alt loslässt..
und nen besserer code für sockets wäre das hier
alias cfb_abo {
window @cfb_Abo
unset %cfb-abo_*
set %cfb-abo_port 9999999
set %cfb-abo_pass **********
set %cfb-abo_timeout 4000
set %cfb_abo_channel %script-channel
set %cfb-abo_msg §5 hat einen neuen Beitrag in der Abteilung §2 zum Thema §3 geposted. §4
set %cfb-abo_vmode echo -t @cfb_Abo
set %cfb-abo_welcomemsg Welcome! www.coding-board.de IRC stats Daemon.
set %cfb-abo_inifile cfb-abo.ini
set %cfb-abo_msgnew msg %cfb_abo_channel
set %cfb-abo_omsgnew omsg %cfb_abo_channel
set %cfb-trigger !
if ($1 === -v) { set %cfb-abo_verbose on }
sockclose cfb-abo_*
socklisten cfb-abo_listen %cfb-abo_port
%cfb-abo_vmode $sock(cfb-abo_listen).status on port $sock(cfb-abo_listen).port
if (%cfb-abo_verbose === on) { %cfb-abo_vmode in verbose mode }
}
alias cfb-abo_timeout {
sockclose $1
if (%cfb-abo_verbose === on) { %cfb-abo_vmode Connection terminated - $1 (timeout) }
}
on *:socklisten:cfb-abo_listen: {
var %cfb-abo_sockrandom cfb-abo_ $+ $rand(1,999999)
while ($sock(%cfb-abo_sockrandom).status == active) {
var %cfb-abo_sockrandom cfb-abo_ $+ $rand(1,999999)
}
if ($sock(%cfb-abo_sockrandom).status !== active) {
sockaccept %cfb-abo_sockrandom
.timer [ $+ [ %cfb-abo_sockrandom ] ] -m 1 %cfb-abo_timeout cfb-abo_timeout %cfb-abo_sockrandom
var %cfb-abo_ip $sock(%cfb-abo_sockrandom).ip
sockwrite %cfb-abo_sockrandom %cfb-abo_welcomemsg
if (%cfb-abo_verbose === on) { %cfb-abo_vmode Connection accepted from %cfb-abo_ip }
}
else {
%cfb-abo_vmode Connection refused - %cfb-abo_sockrandom
}
}
on *:sockread:cfb-abo*: {
window @cfb_Abo
sockread %cfb-abo_data [ $+ [ $sockname ] ]
if (%cfb-abo_verbose === on) { %cfb-abo_vmode Recieving Data - %cfb-abo_data [ $+ [ $sockname ] ] }
cfb-abo_check $sockname %cfb-abo_data [ $+ [ $sockname ] ]
unset %cfb-abo_data [ $+ [ $sockname ] ]
}
on *:sockclose:cfb-abo*: {
.timer [ $+ [ $sockname ] ] off
unset %cfb-abo_data [ $+ [ $sockname ] ]
if (%cfb-abo_verbose === on) { %cfb-abo_vmode Connection terminated - $sockname (Connection lost) }
}
alias cfb-abo_check {
var %sockname $1
tokenize 94 $2-
....
}
ist aus dem bot den wir hier benutzen.. hoffe da ist etwas dabei was dir helfen kann..
der clou an dem ding ist das er gleichzeitig mehrere connections annehmen kann.. ist also kein sockopen auf nen server sondern er spielt selber daemon...
wenn fragen sind welche variablen was machen frag halt... hab bestimmt teile vergessen die in anderen files liegen ;)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.