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:
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!