Hallo Community
Das ich hier neu bin, Habe ich mir gedacht:
Tue ich etwas für die Member (Leute), Die nicht so Gut TCP können
Gesagt, Getan:
Im Anhang und im Spoiler ist ein Beispiel TCP-Programm
Server:
Spoiler anzeigen
TCPStartup() ;TCP Dienst starten
$sIP = @IPAddress1
$iPort = 807
Global $hSocket = TCPListen($sIP, $iPort) ;TCP-Socket erstellen
Global $sRecv = "" ;Variabel für die Empfangenen Daten
Global $iAccept = 0
$sFormatString = "Server erfolgreich Erstellt\n\n IP-Adresse: %s\nPort: %i"
MsgBox(64, "TCP-Server Programm", StringFormat($sFormatString, $sIP, $iPort)) ;Infos über den Server anzeigen
While 1
$iAccept = _TCP_Accept($hSocket) ;Mögliche Verbindungen zulassen
While 1
$sRecv = _TCP_Recv($iAccept) ;Daten empfangen
If $sRecv = "CloseServer" Then _End() ;Server Beenden
If $sRecv = "CloseCon" Then ExitLoop ;Verbindung zum Clienten schliessen
If $sRecv <> "" Then
$sFormatString = "Daten empfangen\nVon IP: %s\n\n%s"
MsgBox(64, "Daten empfangen", StringFormat($sFormatString, _TCP_SocketToIP($iAccept), $sRecv)) ;Text anzeigen
EndIf
WEnd
WEnd
Func _TCP_Accept($iFunc_Socket = 0) ;Verbidungs-Funktion
Local $iReturn
Do
$iReturn = TCPAccept($iFunc_Socket)
Until $iReturn <> -1
Return $iReturn
EndFunc ;==>_TCP_Accept
Func _TCP_Recv($iFunc_Socket = 0) ;Funktion zum Gebufferten Empfangen
Local $sReturn
While 1
$sReturn &= TCPRecv($iFunc_Socket, 10)
If @error Then ExitLoop
WEnd
Return $sReturn
EndFunc ;==>_TCP_Recv
Func _TCP_SocketToIP($SHOCKET) ;Socket -> IP Funktion
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 ;==>_TCP_SocketToIP
Func _End() ;Beenden-Funktion
TCPCloseSocket($iAccept)
TCPCloseSocket($hSocket)
TCPShutdown()
Exit
EndFunc ;==>_End
Und der Client:
Spoiler anzeigen
TCPStartup() ;TCP Dienst starten
$sServerIP = InputBox("TCP-Client Programm", "Bitte geben sie die IP-Adesse des Servers ein!", @IPAddress1, " M", 215, 150) ;Server-IP abfragen
If @error Then _End() ;Bei Fehler, Beenden
$iServerPort = InputBox("TCP-Client Programm", "Server-Port angeben (Normal 807)", "807", " M", 215, 150) ;Server-Port abfragen
If @error Then _End() ;Bei Fehler, Beenden
If (Not Ping($sServerIP)) Then ;Server-PC nicht Online
MsgBox(16, "TCP-Client Programm", "Der Server-Rechner ist anscheinend nicht Online!")
_End()
EndIf
Global $hSocket = TCPConnect($sServerIP, $iServerPort)
If @error Then ;Mit Server kann nicht Verbunden werden
MsgBox(16, "TCP-Client Programm", "Es konnte keine Verbindung mit dem Server hergestellt werden!")
_End()
EndIf
$sFormatString = "Befehl/Text eingeben:\n\n!Exit = Beendet den Clienten\n!ExitServer = Beendet den Server\n!Close = Schliesst die Verbindung"
[/autoit] [autoit][/autoit] [autoit]While 1
$sCommand = InputBox("TCP-Client Programm", StringFormat($sFormatString, ""), "", " M", 215, 200) ;Eingabe für User
If @error Then _End()
Switch $sCommand
Case "!Exit"
_End()
Case "!ExitServer"
TCPSend($hSocket, "CloseServer")
Case "!Close"
TCPSend($hSocket, "CloseCon")
Case Else
TCPSend($hSocket, $sCommand)
EndSwitch
WEnd
Func _End()
TCPCloseSocket($hSocket)
TCPShutdown()
Exit
EndFunc ;==>_End
Und nochmal als Download: autoit.de/wcf/attachment/7422/
Viel Spaß damit, Und ja: AutoIt ist wirklich neu für Mich!
PS: An die Profis: Ist meine Code-Struktur so in Ordnung?