Rob´s BB-Kurs 2
© Robert Gerlach 2001-2002
![]() |
![]() |
|
Peer-to-Peer | Client/Server |
spiel = StartNetGame() |
spiel = HostNetGame("Name
des Spiels") ; und spiel = JoinNetGame("Name des Spiels", Host_IP$) |
spieler = CreateNetPlayer("Name
des Spielers") |
var = RecvNetMessage() |
nachricht = NetMsgType() |
1-99 - Nachrichten von anderen Spielern 100 - Ein neuer Spieler ist der Netzwerksession beigetreten 101 - Ein Spieler hat die Session verlassen 102 - Der Host hat die Session verlassen und der eigene Computer ist nun Host 200 - Ein Problem ist aufgetreten und die Session muß beendet werden |
spieler_nummer = NetMsgFrom() |
spieler_name$ = NetPlayerName$(spieler_nummer) |
nachricht$ = NetMsgData$() |
SendNetMsg code, nachricht$,
sender_nummer, empfaenger_nummer [,wichtig] |
StopNetGame |
udp_stream = CreateUDPStream([portnummer]) |
empfangs_stream = CreateUDPStream(8000) |
IP_Adresse = RecvUdpMsg(empfangs_stream) |
IP_String$ = DottedIP(IP_Nummer) |
byte = ReadByte(empfangs_stream) |
gesamt_byte_anzahl = ReadAvail(empfangs_stream) |
sende_stream = CreateUDPStream(8001) |
WriteLine(sende_stream,
"Bedeutende Nachricht") ;
Beliebiges Zeug in den Stream schreiben SendUdpMsg sende_stream, IP_Adresse, [port] ; Den ganzen Batzen auf einmal senden. |
; Die Streams erstellen sende_stream = CreateUDPStream(8001) empfangs_stream = CreateUDPStream(8000) ; Eine Nachricht empfangen IP_Adresse = RecvUdpMsg(empfangs_stream) ; Wenn einen Nachricht empfangen wurde ein Byte auslesen If IP_Adresse <> 0 Then byte = ReadByte(empfangs_stream) ; Ein Byte in den Sendestream schreiben WriteByte(sende_stream, 23) ; Den Stream an die IP Adresse und den Port desjenigen senden von dem man die Nachricht empfangen hat SendUdpMsg sende_stream, IP_Adresse |
stream = OpenTCPStream("www.robsite.de",
port [,eigener Port]) |
server$ = Input("Adresse>")
; Die Adresse eingeben (IP-Adresse oder z.B. robsite.de) stream = OpenTCPStream(server$, 21) ; Die Verbindung zum Server auf Port 21 herstellen. ; Die Input/Output-Schleife Repeat ; Alles was der Server einem schickt auslesen und printen. l$ = ReadLine$(stream) Print l$ ; Kommandos eingeben lassen und selbige an den Server schicken. i$ = Input(">") WriteLine stream, i$ ; Solange wiederholen bis man 'ende' eingibt. Until i$ = "ende" End |
I = Ich S = Der Server I: Adresse>robsite.de S: 220 FTP Server Ready I: USER xyxyxy S: 331 Password required for xyxyxy I: PASS xyxyxy S: 230 User xyxyxy logged in. I: HELP S: 214-The following commands are recognized (* =>'s) I: [Enter] S: USER PASS ACCT* CWD XCWD CDUP XCUP SMNT* I: [Enter] S: QUIT REIN* PORT PASV TYPE STRU MODE RETR I: quit |
STAT - Liefert die Anzahl der gespeicherten Mails und ihre größe in Oktetts zurück LIST [nummer] - Liefert die Nummer und Oktett-Größe aller Mails zurück. Wird dahinter noch eine Mail-Nummer angegeben, wird nur die Größe dieser Mail ausgegeben. RETR nummer - Gibt die Mail mit der angegebenen Nummer aus. DELE nummer - Löscht die Mail mit der angegebenen Nummer. NOOP - Macht nichts, hält die Verbindung aufrecht um Time-Outs zu vermeiden. RSET - Setzt die aktive Verbindung zurück. Noch nicht ausgeführte Änderungen werden verworfen. |
I = Ich S = Server I: Adresse>pop3.web.de S: +OK WEB.DE POP3-Server I: USER username S: +OK Bitte Kennwort eingeben/enter password I: PASS xyxyxy S: +OK Postfach bereit/mailbox locked and ready I: LIST S: +OK 2 messages (320 octets) I: [Enter] S: 1 120 I: [Enter] S: 2 200 I: [Enter] S: . I: RETR 1 S: +OK 120 octets I: [Enter] S: <Server sendet Nachricht 1> I: [Enter] S: . I: DELE 1 S: +OK message 1 deleted I: RETR 2 S: +OK 200 octets I: [Enter] S: <Server sendet Nachricht 2> I: [Enter] S: . I: DELE 2 S: +OK message 2 deleted I: RETR 3 S: -ERR no such message I: QUIT S: +OK |
HELO Emu - Identifizierung des Clients am Server mit Übergabe einer Adresse oder des Rechnernames (also irgendwas) MAIL - Startet eine Mailübertragung. Als Argument wird die Absenderadresse ("From: karl@web.de") übergeben. RCPT - Recipient. Identifiziert den Empfänger einer Mail. Bei mehreren Empfängern wird das Kommando einfach mehrmals ausgeführt. DATA - Der Server antwortet mit 354 und wartet auf Eingabe der Nachricht. RSET - Reset. Die Mailtransaktion wird abgebrochen. Die Verbindung zwischen beiden Rechnern bleibt aber bestehen. VRFY - Verify. Überprüft eine Empfängeradresse auf Gültigkeit. EXPN - Bei den meisten MTAs dasselbe wie VRFY. NOOP - Dient zur Aufrechterhaltung der Verbindung, ohne dass es einen Time-Out gibt. QUIT - Beendet die Verbindung. Der Server müsste daraufhin die Antwort "250 OK" zurückliefern. |
I = Ich S = Server I: Adresse>smtp.web.de S: 220 web.de SMTP server ready I: HELO Rob S: 250 Rob, freut mich dich zu sehn I: MAIL From:<robscure@web.de> S: 250 <robscure@web.de> Sender ok I: RCPT To:<horst@test.de> S: 250 <horst@test.de> Recipient ok I: RCPT TO:<tom@test.de> S: 250 <tom@test.de> Recipient ok I: DATA S: 354 Enter mail I: Hallo Horst und Tom! I: Beispiel für den Mail-Versand mit SMTP. I: Wisst ihr was? I: Ich aber. I: Haha... I: . S: 250 Mail accepted I: QUIT S: 221 web.de delivering mail |
; --- Allgemein --- IP-Adresse: Eine 12-stellige Nummer in der Form xxx.xxx.xxx.xxx mit welcher jeder ans Internet angeschlossene Computer identifiziert werden kann. Ports: Sozusagen "Türen" nach außen. Es gibt 65535 (von 0 bis 65536) davon. Protokolle: Sie regeln wie Daten über die verschiedenen Computer übertragen werden. ; --- DirectPlay --- ; Um ein Netzwerkspiel mit der Standard-Dialogbox zu starten: spiel = StartNetGame() ; Ein Netzwerkspiel ohne die Dialogbox hosten: spiel = HostNetGame("Name des Spiels") ; Und einem existierenden beitreten: spiel = JoinNetGame("Name des Spielers", Host_IP§) ; Einen Spieler für die Session erschaffen: spieler = CreateNetPlayer("Name des Spiels") ; Eine Nachricht empfangen: var = RecvNetMessage() ; Die Art der Nachricht rausbekommen: nachricht = NetMsgType() ; Liefert die Nummer des Spielers der einem die Nachricht geschickt hat: spieler_nummer = NetMsgFrom() ; Gibt den Namen zur Spielernummer zurück: spieler_name$ = NetPlayerName$(spieler_nummer) ; Die eigentliche Nachricht abrufen: nachricht$ = NetMsgData$() ; Eine eigene Nachricht verschicken: SendNetMsg code, nachricht$, sender_nummer, empfaenger_nummer [,wichtig] ; Ein Netzwerkspiel beenden: StopNetGame ; --- UDP --- ; Einen UDP-Stream erstellen. udp_stream = CreateUDPStream([portnummer]) ; Hat amn eine Nachricht empfangen wird die IP des Senders zurückgeliefert. IP_Adresse = RecvUdpMsg(empfangs_stream) ; Die dezimale IP-Nummer in die Form xxx.xxx.xxx.xxx umwandeln: IP_String$ = DottedIP(IP_Nummer) ; Ein Byte aus dem Empfangs-Stream lesen (näheres dazu im Datei-Tutorial): byte = ReadByte(empfangs_stream) ; Ein Byte in den Sende-Stream schreiben: WriteLine(sende_stream, "Bedeutende Nachricht") ; Den Sende-Stream senden: SendUdpMsg sende_stream, IP_Adresse, [port] ; --- TCP --- ; Einen TCP-Stream zu einem Server hin öffnen: stream = OpenTCPStream("www.robsite.de", port [,eigener Port]) ; Danach kann man dann mit Read und Write auf den Stream zugreifen. Der Port entscheidet über das Protokoll. ; --- Optimierung in Spielen --- ; Keine unnötigen Daten übertragen, nicht immer alles übertragen und von der kleinsten ; verfügbaren Verbindung ausgehen (56K- oder 33K-Modem). ; Wichtige Daten als Ganzes senden, keine Differenz oder ähnliches. |