Hi Leute!
Da ich TCP selber für ein interessantes Thema halte, hab ich mal ein Tutorial darüber geschrieben. Have Fun! ;)
Inhalt:
[-] Voraussetzungen
[-] Was ist TCP?
[-] Client erstellen
[-] Server erstellen
-----------------------------
[-] Voraussetzungen
Ihr solltet die Grundkrentnisse wie Schleifen, If-Abfragen, Variablen und ähnlichem draufhaben. Mehr braucht ihr eigentlich nicht ^^
-----------------------------
[-] Was ist TCP?
Ich versuche das ganze mal einfach zu halten und die Fachbegriffe wegzulassen :)
Jeder PC hat im Internet eine einzigartige Adresse, welche sich nur ändert, wenn man z.B. seinen Router neustartet. Diese Adresse wird IP-Adresse genannt. TCP ist ein Protokoll zur Übertragung von Daten über das Internet. Wenn sich ein Client mit dem Server verbinden möchte, sendet der Client ein Authentifizierungspaket an die IP des Servers. Wenn der Server auf die Verbindung eingehen möchte, antwortet er mit einem weiterem Paket an die IP des Clients. Sobald das abgeschlossen ist, besteht eine Verbindung zwischen eurem Computer (dem Client) und dem dem Server. Diese Verbindung nennt man Socket. Über diesen Socket können der Client und der Server nun Daten austauschen.
Beispiel:
Ihr wollt elitepvpers.com aufrufen, also sendet euer Browser (in dem Fall der Client) an elitepvpers.com (der Server) ein Paket, dass er eine Verbindung herstellen möchte. Nun antwortet der Server mit einem Paket und der Socket (die Verbindung zwischen beiden) wird erstellt. Nun sendet euch der Server den Inhalt der aufgerufenen Website.
Das Beispiel war jetzt stark vereinfacht, sollte euch aber trotzdem dabei helfen zu verstehen was TCP ist.
Falls ihr immer noch nicht verstanden habt was TCP ist, könnt ihr euch ja nochmal den Beitrag bei Wikipedia dazu ansehen: Link
-----------------------------
[-] Client erstellen
Zuerst werden wir den Client erstellen.
Der Client muss:
1. Einen Socket zu dem Server herstellen
2. Prüfen ob die Socket-ID gültig ist
3. Daten an den Server senden
4. Prüfen ob die Daten erfolgreich gesendet wurden
Also, let's start ;)
Zuerst erstellen wir ein Autoit Script und nennen es z.B. "client.au3". Danach müssen wir TCP initialisieren. Das machen wir mit:
Nachdem das getan ist, versuchen wir eine Verbindung zu unserem Server herzustellen (was natürlich momentan scheitern würde, da wir den Server noch nicht erstellt haben). Der Befehl dafür lautet: TCPConnect(IpAdresse, Port)
Fügen wir das in unser Script ein, sieht das ganze so aus:
TCPConnect gibt bei Erfolg einen Socket und bei einem Fehlversuch -1 zurück. Die Socket-ID speichern wir in der Variable "$socket" ab, da wir den Socket ja später auch noch verwenden möchten.
Als nächstes testen wir, ob unser Socket erfolgreich hergestellt wurde:
Die If-Abfrage stellt sicher, dass unser Socket erfolgreich hergestellt wurde (Wir erinnern uns: Wenn TCPConnect(...) -1 zurückgibt, ist etwas schief gelaufen).
Der nächste Schritt wäre jetzt Daten (in unserem Fall ein wenig Text) zum Server (welchen wir ja später noch erstellen werden) zu senden. Der Befehl zum senden von Paketen lautet in AutoIT: TCPSend(socketID, datenDieGesendetWerdenSollen)
Bauen wir das wieder in unser Client Skript ein, sieht das ganz so aus:
Wenn alles glatt läuft, gibt TCPSend(...) die Anzahl der gesendeten Bytes zurück, wenn nicht wird 0 zurückgegeben.
Um ganz sicher zu gehen, dass unser Paket auch ankommt, prüfen wir den Rückgabewert von TCPSend(...) nochmal:
Als letztes schließen wir den Socket noch und fahren TCP herunter:
Unser Client ist jetzt fertig, also weiter zum Server :)
-----------------------------
[-] Server erstellen
Der Server muss:
1. Auf eine Verbindung mit einem Client warten
2. Wenn eine Verbindung ankommt, die gewünschten Daten an den Client senden
Let's go ;)
Wir erstellen uns ein weiteres Script und nennen es z.B. "server.au3".
Der Server muss:
1. Auf eine eingehende Verbindung von einem Socket warten
2. Wenn eine Verbindung hergestellt wurde, die gesendeten Daten verarbeiten (in unserem Fall einfach in einer Message Box ausgeben)
Als erstes wird wieder TCP initialisiert:
Als nächstes müssen wir einen Mainsocket erstellen, mit den unser Server dann auf Verbindungen wartet. Das geschieht mit: TCPListen(ip, port)
In unser Script eingebaut sieht das ganze so aus:
Nun da der Mainsocket erstellt ist, warten wir auf eine Verbindung vom Client. Dafür benutzen wir eine Endlosschleife (While 1) und TCPAccept(mainsocket). Bei eingehender Verbindung gibt TCPAccept(...) eine Socket-ID zurück, ansonsten -1. Das bauen wir auch wieder ein:
Jetzt überprüfen wir, ob eine Verbindung zu unserem Server hergestellt wurde und versuchen ein Paket vom Client zu empfangen. Das geschieht in AutoIt mit TCPRecv(verbundenerSocket, maximaleLängeInBytes)
Das ganze jetzt wieder in unser Server-Script eingebaut:
Wenn eine Verbindung akzeptiert wurde, versucht unser Script ein Paket vom Client zu empfangen und speichert es in $receivedData ab.
Als nächstes geben wir die empfangenen Daten einfach in einer Message Box aus:
Jetzt müssen wir nur noch den Socket schließen:
Und fertig ist unser Server :)
Wenn ihr nun erst die "server.au3" und dann die "client.au3" startet, sollte diese Meldung ausgegeben werden:
[Only registered and activated users can see links. Click Here To Register...]
Ich hoffe euch hat es geholfen, denn mich hat das ganze eine Menge Schreibarbeit gekostet :>
Falls ihr Fehler finden solltet, könnt ihr das gerne posten.
Lg,
Ende!
Da ich TCP selber für ein interessantes Thema halte, hab ich mal ein Tutorial darüber geschrieben. Have Fun! ;)
Inhalt:
[-] Voraussetzungen
[-] Was ist TCP?
[-] Client erstellen
[-] Server erstellen
-----------------------------
[-] Voraussetzungen
Ihr solltet die Grundkrentnisse wie Schleifen, If-Abfragen, Variablen und ähnlichem draufhaben. Mehr braucht ihr eigentlich nicht ^^
-----------------------------
[-] Was ist TCP?
Ich versuche das ganze mal einfach zu halten und die Fachbegriffe wegzulassen :)
Jeder PC hat im Internet eine einzigartige Adresse, welche sich nur ändert, wenn man z.B. seinen Router neustartet. Diese Adresse wird IP-Adresse genannt. TCP ist ein Protokoll zur Übertragung von Daten über das Internet. Wenn sich ein Client mit dem Server verbinden möchte, sendet der Client ein Authentifizierungspaket an die IP des Servers. Wenn der Server auf die Verbindung eingehen möchte, antwortet er mit einem weiterem Paket an die IP des Clients. Sobald das abgeschlossen ist, besteht eine Verbindung zwischen eurem Computer (dem Client) und dem dem Server. Diese Verbindung nennt man Socket. Über diesen Socket können der Client und der Server nun Daten austauschen.
Beispiel:
Ihr wollt elitepvpers.com aufrufen, also sendet euer Browser (in dem Fall der Client) an elitepvpers.com (der Server) ein Paket, dass er eine Verbindung herstellen möchte. Nun antwortet der Server mit einem Paket und der Socket (die Verbindung zwischen beiden) wird erstellt. Nun sendet euch der Server den Inhalt der aufgerufenen Website.
Das Beispiel war jetzt stark vereinfacht, sollte euch aber trotzdem dabei helfen zu verstehen was TCP ist.
Falls ihr immer noch nicht verstanden habt was TCP ist, könnt ihr euch ja nochmal den Beitrag bei Wikipedia dazu ansehen: Link
-----------------------------
[-] Client erstellen
Zuerst werden wir den Client erstellen.
Der Client muss:
1. Einen Socket zu dem Server herstellen
2. Prüfen ob die Socket-ID gültig ist
3. Daten an den Server senden
4. Prüfen ob die Daten erfolgreich gesendet wurden
Also, let's start ;)
Zuerst erstellen wir ein Autoit Script und nennen es z.B. "client.au3". Danach müssen wir TCP initialisieren. Das machen wir mit:
PHP Code:
TCPStartup() ; TCP wird initialisiert
Fügen wir das in unser Script ein, sieht das ganze so aus:
PHP Code:
TCPStartup() ; TCP wird initialisiert
$socket = TCPConnect("127.0.0.1", 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
Als nächstes testen wir, ob unser Socket erfolgreich hergestellt wurde:
PHP Code:
TCPStartup() ; TCP wird initialisiert
$socket = TCPConnect("127.0.0.1", 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
EndIf
Der nächste Schritt wäre jetzt Daten (in unserem Fall ein wenig Text) zum Server (welchen wir ja später noch erstellen werden) zu senden. Der Befehl zum senden von Paketen lautet in AutoIT: TCPSend(socketID, datenDieGesendetWerdenSollen)
Bauen wir das wieder in unser Client Skript ein, sieht das ganz so aus:
PHP Code:
TCPStartup() ; TCP wird initialisiert
$socket = TCPConnect("127.0.0.1", 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
EndIf
$sendedBytes = TCPSend($socket, "Hi. Dieser Text wurde vom Client gesendet :)") ; Sendet den Text an unseren verbundenen Socket
Um ganz sicher zu gehen, dass unser Paket auch ankommt, prüfen wir den Rückgabewert von TCPSend(...) nochmal:
PHP Code:
TCPStartup() ; TCP wird initialisiert
$socket = TCPConnect("127.0.0.1", 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
EndIf
$sendedBytes = TCPSend($socket, "Hi. Dieser Text wurde vom Client gesendet :)") ; Sendet den Text an unseren verbundenen Socket
If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
EndIf
PHP Code:
TCPStartup() ; TCP wird initialisiert
$socket = TCPConnect("127.0.0.1", 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
EndIf
$sendedBytes = TCPSend($socket, "Hi. Dieser Text wurde vom Client gesendet :)") ; Sendet den Text an unseren verbundenen Socket
If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
EndIf
TCPCloseSocket($socket)
TCPShutdown()
-----------------------------
[-] Server erstellen
Der Server muss:
1. Auf eine Verbindung mit einem Client warten
2. Wenn eine Verbindung ankommt, die gewünschten Daten an den Client senden
Let's go ;)
Wir erstellen uns ein weiteres Script und nennen es z.B. "server.au3".
Der Server muss:
1. Auf eine eingehende Verbindung von einem Socket warten
2. Wenn eine Verbindung hergestellt wurde, die gesendeten Daten verarbeiten (in unserem Fall einfach in einer Message Box ausgeben)
Als erstes wird wieder TCP initialisiert:
PHP Code:
TCPStartup() ; TCP wird initialisiert
In unser Script eingebaut sieht das ganze so aus:
PHP Code:
TCPStartup() ; TCP wird initialisiert
$mainsocket = TCPListen("127.0.0.1", 4321) ; Den mainsocket erstellen
PHP Code:
TCPStartup() ; TCP wird initialisiert
$mainsocket = TCPListen("127.0.0.1", 4321) ; Den mainsocket erstellen
While 1 ; Endlosschleife
$acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
WEnd
Das ganze jetzt wieder in unser Server-Script eingebaut:
PHP Code:
TCPStartup() ; TCP wird initialisiert
$mainsocket = TCPListen("127.0.0.1", 4321) ; Den mainsocket erstellen
While 1 ; Endlosschleife
$acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
$receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
EndIf
WEnd
Als nächstes geben wir die empfangenen Daten einfach in einer Message Box aus:
PHP Code:
TCPStartup() ; TCP wird initialisiert
$mainsocket = TCPListen("127.0.0.1", 4321) ; Den mainsocket erstellen
While 1 ; Endlosschleife
$acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
$receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
MsgBox(64, "Nachricht empfangen!", "Es wurde eine Nachricht empfangen: " & $receivedData)
EndIf
WEnd
PHP Code:
TCPStartup() ; TCP wird initialisiert
$mainsocket = TCPListen("127.0.0.1", 4321) ; Den mainsocket erstellen
While 1 ; Endlosschleife
$acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
$receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
MsgBox(64, "Nachricht empfangen!", "Es wurde eine Nachricht empfangen: " & $receivedData)
TCPCloseSocket($acceptedSocket)
EndIf
WEnd
Wenn ihr nun erst die "server.au3" und dann die "client.au3" startet, sollte diese Meldung ausgegeben werden:
[Only registered and activated users can see links. Click Here To Register...]
Ich hoffe euch hat es geholfen, denn mich hat das ganze eine Menge Schreibarbeit gekostet :>
Falls ihr Fehler finden solltet, könnt ihr das gerne posten.
Lg,
Ende!