Also ich schreibe gerade ein Paar Funktionen damit ich leichter ein TCP-Server machen kann, den ich für mein nächstes Vorhaben brauche.
Aber leider bekomm ich kein Recv.
Spoiler anzeigen
$array = TCP_StartServer ( 8080 )
;MsgBox ( 0 , "", $array & "|" & @error & "|" & @extended )
;_ArrayDisplay ($array)
TCP_RegisterEvent (0, "c", $array )
TCP_RegisterEvent (1, "r", $array )
TCP_RegisterEvent (2, "d", $array )
TCP_MainActionLoop ( $array )
;MsgBox ( 0 , "", $return & "|" & @error & "|" & @extended )
;_ArrayDisplay ( $return )
; ==== TEST =====
Func c ( $socket )
MsgBox ( 0 , "Connect", "Socket " & $socket & " connected")
EndFunc
Func r ($data, $socket )
MsgBox ( 0 , "Reciev", "Recieved Data '" & $data & "' from Socket " & $socket )
EndFunc
Func d ( $socket )
MsgBox ( 0 , "DisConnect", "Socket " & $socket & " disconnected")
EndFunc
; ==== Main ====
Func TCP_StartServer ( $iPort, $sIP = "0.0.0.0" )
If not IsInt ( $iPort ) or not IsString ( $sIP ) then
Return SetError (1,0,0)
EndIf
TCPStartup ()
Local $hMainSocket, $aServerArray, $aClientArray
$hMainSocket = TCPListen ( $sIp, $iPort )
if @error Then
Return SetError (2,@error,0)
EndIf
Dim $aServerArray[6]
$aServerArray[0] = "ServerArray: "&@ScriptName
$aServerArray[1] = $hMainSocket
$aServerArray[2] = False
$aServerArray[3] = False
$aServerArray[4] = False
Dim $aClientArray[1]
$aServerArray[5] = $aClientArray
Return $aServerArray
EndFunc
Func TCP_RegisterEvent ( $iEventID, $sFunction, ByRef $aServerArray )
if not IsInt ($iEventID) or not IsString ( $sFunction ) Then
Return SetError (1,0,0)
Else
if not IsArray ($aServerArray) or $aServerArray[0] <> "ServerArray: "&@ScriptName Then
Return SetError (2,0,0)
EndIf
EndIf
Switch $iEventID
Case 0
;client connect
$aServerArray[2] = $sFunction
Case 1
;client recv
$aServerArray[3] = $sFunction
Case 2
;client disconnect
$aServerArray[4] = $sFunction
Case Else
Return SetError (3,0,0)
EndSwitch
Return $aServerArray
EndFunc
Func TCP_MainActionLoop ( ByRef $aServerArray )
if not IsArray ($aServerArray) or $aServerArray[0] <> "ServerArray: "&@ScriptName Then
Return SetError (1,0,0)
EndIf
Local $hConnectSocket, $iUbound, $aTempArray
While 1
$hConnectSocket = TCPAccept ( $aServerArray[1] )
$aTempArray = $aServerArray[5]
if $hConnectSocket <> -1 then
;client connect
if $aServerArray[2] <> '' Then
Call ( $aServerArray[2], $hConnectSocket )
EndIf
$iUbound = UBound ( $aTempArray )
ReDim $aTempArray[$iUbound+1]
$aTempArray[$iUbound-1] = $hConnectSocket
EndIf
For $i = 0 to UBound ( $aTempArray ) -1
If $aTempArray[$i] <> "" Then
MsgBox ( 0 , "", $aTempArray[$i] )
$sRecv = TCPRecv ( $aTempArray[$i], 20000000)
If @error Then
;client disconnected
$aTempArray[$i] = ''
if $aServerArray[4] <> '' Then
Call ( $aServerArray[4], $hConnectSocket )
EndIf
EndIf
if $sRecv <> '' Then
if $aServerArray[3] <> '' Then
;client send
Call ( $aServerArray[3], $sRecv ,$aTempArray[$i])
EndIf
EndIf
EndIf
Next
Sleep ( 25 )
WEnd
EndFunc