es gibt hier im Forum bereits ein Tutorial (
), was sich teilweise mit TCP befasst und auch teile meiner Tutorials wiederfindet, allerdings denke ich doch, dass vor allem für die Leute die Tcp später regelmäßig nutzten wollen dieses Tutorial recht nützlich sein wird Zu Beginn der Reihe beschäftigen sich die Tutorials mit den Grundlagen im Bereich von HTTP-Packete (sprich wie man per TCP eine Seite aufruft und Packet sendet usw.) ... An dieser Stelle sei gesagt, dass sich die Quellcodes nur speziell für die Websites eignen, bei denen ich sie benutzt haben... Die Codes sind keinesfalls perfekt... Sie dienen nur zur verdeutlichung, wie genau man TCP benutzt... ich rate deshalb vor allem die TCPRequest-Funktion nicht weiter zu verwenden, sondern immer selber zu sniffen^^ (Ihr habt nix verstanden? Kein Problem in den Tutorials wird alles erklärt
Es gibt aber natürlich auch weitaus umfangreichere Tutorials als einen Browser^^ In meiner momentan letzten Reihe befasse ich mich z.B. damit wie ihr einen TCP-Chat programmiert, der stabil läuft und ausbaufähig ist
Jedes meiner Videos wird hier zusammen mit den jeweiligen Quellcodes veröffentlicht (wobei ich drauf aufmerksam mache, dass ihr die Quellcode weiterhin benutzten und veröffentlichen dürft, wenn ihr dazu meinen Namen nennt und einen Verweis auf diesen Thread oder das AIB-Forum nennt...)
Damit ihr immer auf dem neusten Stand seit könnt ihr mich auch abonnieren und meinen
besuchen Aber genug der Worte... lassen wir Bilder sprechen:
TCP-Tut #1: Quellcode einer Website (10 Min / 1 Teil):

PHP Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
;~ Tutorial By AMrK 4 Auto!tBot.de ~;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
$packet = 'GET / HTTP/1.1' & @CRLF & _
'Host: www.Auto!tBot.de' & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Connection: keep-alive' & @CRLF & @CRLF
TCPStartup()
$socket = TCPConnect('85.25.142.42', 80)
$bytes = TCPSend($socket, $packet)
ConsoleWrite($bytes & @CRLF)
Do
$recv = TCPRecv($socket, 1024)
Until $recv <> ""
Do
$recv &= TCPRecv($socket, 1024)
Until @error Or StringInStr($recv, '</html>')
FileWrite(@ScriptDir & '\test.html', $recv)
TCPCloseSocket($socket)
TCPShutdown()
TCP-Tut #2: Login & Cookies (20 Min / 2 Teile):


PHP Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
;~ Tutorial By AMrK 4 Auto!tBot.de ~;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
#Include <string.au3>
$quellcode = TCPRequest('217.111.81.80','www.pcwelt.de','forum/login.php?do=login')
$cookies = _StringBetween($quellcode,'Set-Cookie: ',';',1)
$stringcookie = 'Cookie: '
For $i = 0 To UBound($cookies)-1
$stringcookie &= $cookies[$i]&';'
Next
$stringcookie = StringTrimRight($stringcookie,1)
ConsoleWrite($stringcookie & @CRLF)
$quellcode = TCPRequest2('217.111.81.80','www.pcwelt.de', 'forum/index.php',10000, $stringcookie)
$quellcode = TCPRequest2('217.111.81.80','www.pcwelt.de', 'forum/',10000, $stringcookie)
FileWrite(@ScriptDir & '\source.html', $quellcode)
Func TCPRequest2($sIp, $sHost, $sSeite = "", $iMaxTime = 10000, $sCookies = '')
Local $sPacket, $iSocket, $iTimer, $sPost
$sPacket = 'GET /' & $sSeite & ' HTTP/1.1' & @CRLF & _
'Host: ' & $sHost & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Connection: keep-alive' & @CRLF & _
$sCookies & @CRLF & @CRLF
TCPStartup()
If @error Then Return SetError(1,0,"")
$iSocket = TCPConnect($sIp, 80)
If @error Then Return SetError(2,0,"")
TCPSend($iSocket, $sPacket)
If @error Then Return SetError(3,0,"")
$iTimer = TimerInit()
Do
$sRecv = TCPRecv($iSocket, 1024)
If TimerDiff($iTimer) > $iMaxTime Then Return SetError(4,0,"")
Until $sRecv <> ""
Do
$sRecv &= TCPRecv($iSocket, 1024)
Until @error OR StringInStr($sRecv, '</html>')
TCPCloseSocket($iSocket)
TCPShutdown()
Return $sRecv
EndFunc
Func TCPRequest($sIp, $sHost, $sSeite = "", $iMaxTime = 10000)
Local $sPacket, $iSocket, $iTimer, $sPost
$sPost = 'vb_login_username=ImLowBot&vb_login_password=&s=&securitytoken=guest&do=login&vb_login_md5password=e807f1fcf82d132f9bb018ca6738a19f&vb_login_md5password_utf=e807f1fcf82d132f9bb018ca6738a19f'
$sPacket = 'POST /' & $sSeite & ' HTTP/1.1' & @CRLF & _
'Host: ' & $sHost & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Connection: keep-alive' & @CRLF & _
'Content-Length: ' & StringLen($sPost) & @CRLF & @CRLF & $sPost
TCPStartup()
If @error Then Return SetError(1,0,"")
$iSocket = TCPConnect($sIp, 80)
If @error Then Return SetError(2,0,"")
TCPSend($iSocket, $sPacket)
If @error Then Return SetError(3,0,"")
$iTimer = TimerInit()
Do
$sRecv = TCPRecv($iSocket, 1024)
If TimerDiff($iTimer) > $iMaxTime Then Return SetError(4,0,"")
Until $sRecv <> ""
Do
$sRecv &= TCPRecv($iSocket, 1024)
Until @error OR StringInStr($sRecv, '</html>')
TCPCloseSocket($iSocket)
TCPShutdown()
Return $sRecv
EndFunc
TCP-Tut #3: Regist & Botprotection (20 Min / 2 Teile):


PHP Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
;~ Tutorial By AMrK 4 Auto!tBot.de ~;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
#include <string.au3>
#include <HumanVerify.au3>
$username = 'blubb34er423'
$md5 = 'dd46a756faad4727fb679320751f6dea'
$email = '
'
$quellcode1 = TCPRequest('217.111.81.80','www.pcwelt.de','forum/register.php')
$cookies = GetCookies($quellcode1)
$quellcode2 = TCPRequest('217.111.81.80','www.pcwelt.de','forum/register.php?do=register','s=&securitytoken=guest&do=register&url=index.php&month=&day=&year=&who=adult&agree=1',$cookies,'http://www.pcwelt.de/forum/register.php')
FileWrite(@ScriptDir&'\frage.html',$quellcode2)
$hash = _StringBetween($quellcode2,'<input id="hash" type="hidden" name="humanverify[hash]" value="','" />',1)
$hvhash = $hash[0]
$frage = _StringBetween($quellcode2,'<div><strong><label for="humanverify">','</label></strong></div>',1)
$hvhash = $hash[0]
$hvinput = HumanVerify($frage[0])
$post = 's=&securitytoken=guest&do=addmember&url=index.php&agree=1&password_md5='&$md5&'&passwordconfirm_md5='&$md5&'&day=0&month=0&year=0&username='&$username&'&password=&passwordconfirm=&email='&$email&'&emailconfirm='&$email&'&humanverify[input]='&$hvinput&'&humanverify[hash]='&$hvhash&'&userfield[field19]=1&userfield[field19_set]=1&timezoneoffset=1&dst=2&options[adminemail]=1'
$quellcode3 = TCPRequest('217.111.81.80','www.pcwelt.de','forum/register.php?do=addmember',$post,$cookies,'http://www.pcwelt.de/forum/register.php?do=register')
FileWrite(@ScriptDir&'\gesendet.html',$quellcode3)
MsgBox(0,"",$hvinput)
Func GetCookies($sQuellcode)
Local $sCookies, $i, $aCookies
$sCookies = ''
$aCookies = _StringBetween($sQuellcode,'Set-Cookie: ',';',1)
For $i=0 To UBound($aCookies)-1
$sCookies &= $aCookies[$i]&';'
Next
Return $sCookies
EndFunc
Func TCPRequest($sIp, $sHost, $sSeite = "", $sPost = '', $sCookies = '', $sReferer = '', $iMaxTime = 10000)
Local $sPacket, $iSocket, $iTimer
If $sPost = '' Then
$sPacket = 'GET /' & $sSeite & ' HTTP/1.1' & @CRLF
Else
$sPacket = 'POST /' & $sSeite & ' HTTP/1.1' & @CRLF
EndIf
$sPacket &= 'Host: ' & $sHost & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Content-Type: application/x-www-form-urlencoded' & @CRLF & _
'Connection: keep-alive' & @CRLF
If $sReferer <> '' Then
$sPacket &= 'Referer: '&$sReferer & @CRLF
EndIf
If $sCookies <> '' Then
$sPacket &= 'Cookie: ' & $sCookies & @CRLF
EndIf
If $sPost <> '' Then
$sPacket &= 'Content-Length: ' & StringLen($sPost) & @CRLF
EndIf
$sPacket &= @CRLF
If $sPost <> '' Then
$sPacket &= $sPost
EndIf
TCPStartup()
If @error Then Return SetError(1,0,"")
$iSocket = TCPConnect($sIp, 80)
If @error Then Return SetError(2,0,"")
TCPSend($iSocket, $sPacket)
If @error Then Return SetError(3,0,"")
$iTimer = TimerInit()
Do
$sRecv = TCPRecv($iSocket, 1024)
If TimerDiff($iTimer) > $iMaxTime Then Return SetError(4,0,"")
Until $sRecv <> ""
Do
$sRecv &= TCPRecv($iSocket, 1024)
Until @error OR StringInStr($sRecv, '</html>')
TCPCloseSocket($iSocket)
TCPShutdown()
Return $sRecv
EndFunc
PHP Code:
#include <string.au3>
Const $sZahlen[13] = ['null','eins','zwei','drei','vier','fünf','sechs','sieben','acht','neun','zehn','elf','zwölf']
Const $sZehner[10] = ['null','zehn','zwanzig','dreißig','vierzig','fünfzig','sechzig','siebzig','achtzig','neunzig']
Func HumanVerify($sFrage)
Local $sFaktor, $iZahl1, $iZahl2, $sRechnung, $iErgebnis
If StringInStr($sFrage,'Welcher Tag ist heute?',1) Then
Switch @WDAY
Case 1
Return 'sonntag'
Case 2
Return 'montag'
Case 3
Return 'dienstag'
Case 4
Return 'mittwoch'
Case 5
Return 'donnerstag'
Case 6
Return 'freitag'
Case 7
Return 'samstag'
EndSwitch
ElseIf StringInStr($sFrage,'Bitte schreiben Sie das folgende Wort als Zahl: ',1) Then
$sFaktor = StringSplit($sFrage, 'Zahl: ',1)
Return WortZuZahl($sFaktor[2])
ElseIf StringInStr($sFrage,'Was ergibt',1) Then
$sFaktor = _StringBetween($sFrage,'Was ergibt ','?',1)
$sFaktor = StringSplit($sFaktor[0],' ')
$iZahl1 = WortZuZahl($sFaktor[1])
$iZahl2 = WortZuZahl($sFaktor[3])
$sRechnung = WortZuOperation($sFaktor[2])
$iErgebnis = Execute(String($iZahl1&$sRechnung&$iZahl2))
Return ZahlZuWort($iErgebnis)
ElseIf StringInStr($sFrage,'An jeder Hand haben wir fünf',1) Then
Return 'finger'
EndIf
EndFunc
Func ZahlZuWort($iZahl)
Local $i
Switch StringLen(String($iZahl))
Case 1
Return $sZahlen[$iZahl]
Case 2
If $iZahl = 11 Then
Return 'elf'
ElseIf $iZahl = 12 Then
Return 'zwölf'
EndIf
For $i = 10 To 90 Step +10
If $iZahl = $i Then Return $sZehner[$i/10]
Next
If $iZahl < 20 Then
Return $sZahlen[StringRight(String($iZahl),1)]&'zehn'
Else
If StringRight(String($iZahl),1) = '1' Then
Return 'einund' & $sZehner[StringLeft(String($iZahl),1)]
Else
Return $sZahlen[StringRight(String($iZahl),1)] & 'und' & $sZehner[StringLeft(String($iZahl),1)]
EndIf
EndIf
EndSwitch
Return 0
EndFunc
Func WortZuZahl($sWort)
Local $i, $z
$sWort = StringLower($sWort)
For $i = 0 to 12
If $sWort = $sZahlen[$i] Then Return $i
Next
For $z = 1 To 9
If StringRight($sWort,StringLen($sZehner[$z])) = $sZehner[$z] Then
$sWort = StringTrimRight($sWort,StringLen($sZehner[$z])+3)
If StringLen($sWort) > 0 Then
If StringRight($sWort,3) = 'ein' Then
$sWort = StringTrimRight($sWort,3)
Return __WortZuZahl($sWort)&Int($z&1)
Else
For $i = 1 to 9
If StringRight($sWort,StringLen($sZahlen[$i])) = $sZahlen[$i] Then
$sWort = StringTrimRight($sWort,StringLen($sZahlen[$i]))
Return __WortZuZahl($sWort)&Int($z&$i)
EndIf
Next
EndIf
EndIf
Return __WortZuZahl($sWort)&Int($z&0)
EndIf
Next
Return 0
EndFunc
Func __WortZuZahl($sWort)
Local $iHundert, $iTausend, $i
If StringRight($sWort,7) = 'hundert' Then
$sWort = StringTrimRight($sWort,7)
If StringRight($sWort,3) = 'ein' Then
$iHundert = 1
Else
For $i = 2 to 9
If StringRight($sWort,StringLen($sZahlen[$i])) = $sZahlen[$i] Then
$sWort = StringTrimRight($sWort,StringLen($sZahlen[$i]))
$iHundert = $i
ExitLoop
EndIf
Next
EndIf
Else
$iHundert = 0
EndIf
If StringRight($sWort,7) = 'tausend' Then
$sWort = StringTrimRight($sWort,7)
If StringRight($sWort,3) = 'ein' Then
$iTausend = 1
Else
For $i = 2 to 9
If StringRight($sWort,StringLen($sZahlen[$i])) = $sZahlen[$i] Then
$iTausend = $i
ExitLoop
EndIf
Next
EndIf
Else
$iTausend = 0
EndIf
If Int($iTausend&$iHundert) = 0 Then
Return ''
Else
Return Int($iTausend&$iHundert)
EndIf
EndFunc
Func WortZuOperation($sWort)
Switch $sWort
Case 'minus'
Return '-'
Case 'plus'
Return '+'
Case 'durch'
Return '/'
Case 'mal'
Return '*'
Case 'subtrahiert'
Return '*(-1) +'
Case 'addiert', 'addiert mit', 'addiert zu'
Return '+'
Case 'dividiert', 'dividiert durch'
Return '-'
Case 'multipliziert', 'multipliziert mit'
Return '*'
EndSwitch
EndFunc
Spambot-Tut #1: ICQ (9 Min / 1 Teil):

PHP Code:
#include <string.au3>
For $i = 1 to 10
$seite = TCPRequest('205.188.251.118','people.icq.com','people/?page=' & $i)
$nummern = _StringBetween($seite, 'http://status.icq.com/online.gif?icq=', '&img=26', 1)
For $o = 0 To UBound($nummern) -1
FileDelete(@TempDir & '\cmd.php')
FileWrite(@TempDir & '\cmd.php', '[ICQ Message User]' & @LF & 'UIN=' & $nummern[$o] & @LF)
Run('C:\Programme\ICQ6.5\ICQLRun.exe '&@TempDir & '\cmd.php')
Sleep(1000)
Send('Ich bin ein Bot')
Sleep(25)
Send("{ENTER}")
Sleep(500)
Next
Next
Func TCPRequest($sIp, $sHost, $sSeite = '', $sPost = '', $sCookies = '', $sReferer = '', $sEndString = '</html>', $iMaxConnectTime = 10000, $iMaxRecvTime = 30000)
Local $sPacket, $iSocket, $iTimer
If $sPost = '' Then
$sPacket = 'GET /' & $sSeite & ' HTTP/1.1' & @CRLF
Else
$sPacket = 'POST /' & $sSeite & ' HTTP/1.1' & @CRLF
EndIf
$sPacket &= 'Host: ' & $sHost & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Content-Type: application/x-www-form-urlencoded' & @CRLF & _
'Connection: keep-alive' & @CRLF
If $sReferer <> '' Then
$sPacket &= 'Referer: '&$sReferer & @CRLF
EndIf
If $sCookies <> '' Then
$sPacket &= 'Cookie: ' & $sCookies & @CRLF
EndIf
If $sPost <> '' Then
$sPacket &= 'Content-Length: ' & StringLen($sPost) & @CRLF
EndIf
$sPacket &= @CRLF
If $sPost <> '' Then
$sPacket &= $sPost
EndIf
TCPStartup()
If @error Then Return SetError(1,0,"")
$iSocket = TCPConnect($sIp, 80)
If @error Then Return SetError(2,0,"")
TCPSend($iSocket, $sPacket)
If @error Then Return SetError(3,0,"")
$iTimer = TimerInit()
Do
$sRecv = TCPRecv($iSocket, 1024)
If TimerDiff($iTimer) > $iMaxConnectTime Then Return SetError(4,0,"")
Until $sRecv <> ""
$iTimer = TimerInit()
Do
$sRecv &= TCPRecv($iSocket, 1024)
If TimerDiff($iTimer) > $iMaxRecvTime Then Return SetError(5,0,"")
Until @error OR StringInStr($sRecv, $sEndString)
TCPCloseSocket($iSocket)
TCPShutdown()
Return $sRecv
EndFunc
TCP Chat Tut: Server & mehrere Clients (80 Min / 8 Teile):








PHP Code:
#Include <Array.au3>
Const $sServerIp = "127.0.0.1"
Const $sServerPort = 1337
Const $sServerMaxClients = 10
Global $sNeueNachrichten, $sVerlauf
Global $aClientConnections[1], $aClientIps[1], $aClientRecv[1]
$aClientConnections[0] = 0
$sNeueNachrichten = ""
$sVerlauf = ""
For $i = 1 to 100
ConsoleWrite( "~" )
Next
ConsoleWrite( @CRLF )
Console("AMrK's AutoIt TCP Chat")
Console(" Version 1.0")
Console("")
TCPStartup()
Console("TCP gestartet!")
$iListen = TCPListen($sServerIp, $sServerPort)
Console("Serversocket erstellt: " & $iListen)
Global $iTimer = TimerInit()
Console("Ticktimer initialisiert!")
While 1
$iTempAccept = TCPAccept($iListen)
If $iTempAccept <> -1 Then
If $aClientConnections[0] < $sServerMaxClients Then
Client_Connect($iTempAccept)
Else
Client_SendFull($iTempAccept)
EndIf
EndIf
Client_Tick()
Client_Recv()
Server_Recv_Verarbeiten()
Server_Send_Nachrichten()
WEnd
TCPShutdown()
Console("TCP heruntergefahren!")
Func Server_Send_Nachrichten()
Local $i
Local $sPacket
$sPacket = "server=" & $sServerIp & @CRLF & _
"time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
"msg=" & StringTrimLeft(StringToBinary($sNeueNachrichten),2) & @CRLF & @CRLF
If $aClientConnections[0] > 0 Then
For $i = 1 To $aClientConnections[0]
TCPSend($aClientConnections[$i], $sPacket)
Next
$sNeueNachrichten = ""
EndIf
EndFunc
Func Server_Recv_Verarbeiten()
Local $i, $j, $iPacketEnde, $aTemp, $iValue
If $aClientConnections[0] > 0 Then
$i = 1
Do
$iPacketEnde = StringInStr($aClientRecv[$i], StringTrimLeft(StringToBinary(@CRLF & @CRLF),2), 1)
If $iPacketEnde Then
$aTemp = StringSplit(BinaryToString("0x" & StringLeft($aClientRecv[$i],$iPacketEnde-1)), @CRLF, 1)
$aClientRecv[$i] = StringTrimLeft($aClientRecv[$i],$iPacketEnde+7)
For $j = 1 To $aTemp[0]
$iValue = StringInStr($aTemp[$j], "=")
Switch StringLeft($aTemp[$j], $iValue-1)
Case "client"
If StringTrimLeft($aTemp[$j], $iValue) <> $aClientIps[$i] Then
Client_Disconnect($i)
$i -= 1
EndIf
Case "time"
Local $aClientDate, $aServerDate
$aClientDate = StringSplit(StringTrimLeft($aTemp[$j], $iValue), ".-:", 0)
$aServerDate = StringSplit(@MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC, ".-:", 0)
Case "operation"
Switch StringTrimLeft($aTemp[$j], $iValue)
Case "disconnect"
If StringTrimLeft($aTemp[$j], $iValue) <> $aClientIps[$i] Then
Client_Disconnect($i)
$i -= 1
EndIf
EndSwitch
Case "msg"
$sNeueNachrichten &= "User " & $i & ": " & BinaryToString("0x" & StringTrimLeft($aTemp[$j], $iValue)) & @CRLF
$sVerlauf &= "User " & $i & ": " & BinaryToString("0x" & StringTrimLeft($aTemp[$j], $iValue)) & @CRLF
EndSwitch
Next
EndIf
$i += 1
Until $i > $aClientConnections[0]
EndIf
EndFunc
Func Client_SendFull(ByRef $iTempAccept)
Local $sPacket
$sPacket = "server=" & $sServerIp & @CRLF & _
"time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
"operation=refused" & @CRLF & _
"reason=full" & @CRLF & @CRLF
TCPSend($iTempAccept, $sPacket)
TCPCloseSocket($iTempAccept)
EndFunc
Func Client_Recv()
Local $i
If $aClientConnections[0] > 0 Then
For $i = 1 To $aClientConnections[0]
$aClientRecv[$i] = StringTrimLeft(TCPRecv($aClientConnections[$i], 1024, 1),2)
Next
EndIf
EndFunc
Func Client_Tick()
Local $sPacket, $i
$sPacket = "server=" & $sServerIp & @CRLF & _
"time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
"operation=tick" & @CRLF & @CRLF
If TimerDiff($iTimer) > 3000 Then
If $aClientConnections[0] > 0 Then
$i = 1
Do
If TCPSend($aClientConnections[$i], $sPacket) = 0 Then
Client_Disconnect($i)
Else
$i += 1
EndIf
Until $i > $aClientConnections[0]
EndIf
$iTimer = TimerInit()
EndIf
EndFunc
Func Client_Disconnect($iNr)
If $iNr <= $aClientConnections[0] Then
TCPCloseSocket($aClientConnections[$iNr])
Console("Client #" & $iNr & " disconnected from: " & $aClientIps[$iNr])
_ArrayDelete($aClientIps, $iNr)
_ArrayDelete($aClientConnections, $iNr)
_ArrayDelete($aClientRecv, $iNr)
$aClientConnections[0] -= 1
EndIf
EndFunc
Func Client_Connect($iTempAccept)
Local $sPacket, $sIp
$sIp = SocketToIP($iTempAccept)
$sPacket = "server=" & $sServerIp & @CRLF & _
"time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
"operation=welcome" & @CRLF & _
"userid=" & ($aClientConnections[0]+1) & @CRLF & @CRLF
_ArrayAdd($aClientIps, $sIp)
_ArrayAdd($aClientConnections, $iTempAccept)
_ArrayAdd($aClientRecv, "")
$aClientConnections[0] += 1
TCPSend($aClientConnections[ $aClientConnections[0] ], $sPacket)
Console("Client #" & $aClientConnections[0] & " connected from: " & $sIp)
EndFunc
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
Return $aRet
EndFunc
Func Console($sString)
Local $i, $sText
$sText = "~ " & $sString
For $i = 1 To (96 - StringLen($sString))
$sText &= " "
Next
ConsoleWrite( $sText & " ~" & @CRLF )
EndFunc
PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Const $sServerIp = "127.0.0.1"
Const $sServerPort = 1337
Global $timer
$Form = GUICreate("Chat Client", 636, 351, 191, 124)
$Edit = GUICtrlCreateEdit("Connecting to " & $sServerIp & ":" & $sServerPort, 0, 0, 633, 329)
$Input = GUICtrlCreateInput("", 0, 328, 521, 21)
$Button = GUICtrlCreateButton("Senden", 520, 328, 115, 20, $WS_GROUP)
GUISetState(@SW_SHOW)
TCPStartup()
$iConnect = TCPConnect($sServerIp, $sServerPort)
If @error Then Exit
GUICtrlSetData($Edit,"")
$timer = TimerInit()
$recv = ""
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button
Client_Send()
EndSwitch
Client_Recv()
If TimerDiff($timer) > 10*1000 Then
GUICtrlSetData($Edit, GUICtrlRead($Edit) & "Connection loast!" & @CRLF)
$timer = TimerInit()
EndIf
WEnd
TCPCloseSocket($iConnect)
TCPShutdown()
Func Client_Send()
Local $sPacket, $i
$sPacket = "server=" & $sServerIp & @CRLF & _
"time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
"msg=" & StringTrimLeft(StringToBinary(GUICtrlRead($Input)),2) & @CRLF & @CRLF
TCPSend($iConnect, $sPacket)
GUICtrlSetData($Input,"")
EndFunc
Func Client_Recv()
$recv &= StringTrimLeft(TCPRecv($iConnect, 1024, 1), 2)
$iPacketEnde = StringInStr($recv, StringTrimLeft(StringToBinary(@CRLF & @CRLF),2), 1)
If $iPacketEnde Then
$aTemp = StringSplit(BinaryToString("0x" & StringLeft($recv,$iPacketEnde-1)), @CRLF, 1)
$recv = StringTrimLeft($recv,$iPacketEnde+7)
For $j = 1 To $aTemp[0]
$iValue = StringInStr($aTemp[$j], "=")
Switch StringLeft($aTemp[$j], $iValue-1)
Case "time"
Local $aClientDate, $aServerDate
$aClientDate = StringSplit(StringTrimLeft($aTemp[$j], $iValue), ".-:", 0)
$aServerDate = StringSplit(@MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC, ".-:", 0)
Case "operation"
Switch StringTrimLeft($aTemp[$j], $iValue)
Case "tick"
$timer = TimerInit()
EndSwitch
Case "msg"
GUICtrlSetData($Edit, GUICtrlRead($Edit) & BinaryToString("0x" & StringTrimLeft($aTemp[$j], $iValue)))
EndSwitch
Next
EndIf
EndFunc







