Hi ich habe mal einen TCP CHat gemacht der auch funktioniert allerdings nur auf meinem Computer weil wenn ich mit jemandem anderen CHaten will kommt immer server nix an
Client
Spoiler anzeigen
;CLIENT! Starte mich, nachdem der Server gestartet wurde!!!!!!!!!!!!!!!
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit];HotKeySet("{ENTER}","_senden2")
Global Const $WS_POPUP = 0x80000000
Global Const $WS_MAXIMIZEBOX = 0x00010000
Global Const $WS_MINIMIZEBOX = 0x00020000
Global Const $WS_SIZEBOX = 0x00040000
Global Const $BS_MULTILINE = 0x2000
TCPStartup()
Dim $szServerPC = @ComputerName
Dim $szIPADDRESS = TCPNameToIP($szServerPC)
Dim $nPORT = 33891
Dim $ConnectedSocket = -1
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
[/autoit] [autoit][/autoit] [autoit]Dim $szData
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If @error Then
MsgBox(4112, "Fehler", "TCPConnect schlug mit folgendem WSA-Fehler fehl: " & @error)
Else
While 1
$name = InputBox("Name", "Bitte deinen Name eingeben:")
;TCPSend($ConnectedSocket,$name)
Sleep(1000)
_senden()
WEnd
EndIf
Func _senden()
$gui = GUICreate("TCP Send", 300, 200)
$szData = GUICtrlCreateInput("", 10, 10)
$sendenbutton = GUICtrlCreateButton("Senden", 10, 50)
GUISetState()
;If @error Or $szData = "" Then Exit
;TCPSend($ConnectedSocket, GUICtrlRead($szData))
;TCPSend($ConnectedSocket, $name)
If @error Then Exit
While 1
$msg = GUIGetMsg()
$readdeselementes = GUICTrlREad($szData)
Switch $msg
Case $sendenbutton
If ($readdeselementes) = ("") THen
TCPSend($ConnectedSocket,$name & " " & "(" & @Hour & ":" & @MIN & ")" & @CRLF & ":-)" & @CRLF)
;TCPSend($ConnectedSocket, $name)
Else
TCPSend($ConnectedSocket,($name & " " & "(" & @Hour & ":" & @MIN & ")" & @CRLF & $readdeselementes) & @CRLF)
;Sleep(0)
;TCPSend($ConnectedSocket, $name)
EndIf
Case - 3
Exit
EndSwitch
WEnd
EndFunc ;==>_senden
Server:
Spoiler anzeigen
;SERVER!! Starte mich zuerst !!!!!!!!!!!!!!!
#include <GUIConstants.au3>
Global Const $WS_POPUP = 0x80000000
Global Const $WS_MAXIMIZEBOX = 0x00010000
Global Const $WS_MINIMIZEBOX = 0x00020000
Global Const $WS_SIZEBOX = 0x00040000
Global Const $BS_MULTILINE = 0x2000
Dim $szIPADDRESS = @IPAddress1
Dim $nPORT = 33891
TCPStartUp()
[/autoit] [autoit][/autoit] [autoit]$MainSocket = TCPListen($szIPADDRESS, $nPORT,2)
[/autoit] [autoit][/autoit] [autoit]If $MainSocket = -1 Then Exit
[/autoit] [autoit][/autoit] [autoit]Dim $GOOEY = GUICreate("Mein Server (IP: " & $szIPADDRESS & ")",300,200,0,0)
Dim $edit = GUICtrlCreateEdit("",10,10,280,180)
GUICTrlSEtState($edit,$GUI_DISABLE)
GUISetState()
Dim $ConnectedSocket = -1
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
Dim $szIP_Accepted = SocketToIP($ConnectedSocket)
Dim $msg, $recv
While 1
$msg = GUIGetMsg()
$name = TCPRecv($ConnectedSocket,2048)
;$recv = TCPRecv($ConnectedSocket, 2048)
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
If @error Then ExitLoop
; Erneuert das Edit Steuerelement mit dem, was wir empfangen haben.
;----------------------------------------------------------------
If $name <> "" Then GUICtrlSetData($edit,$name & GUICTrlRead($edit)) ;& " " & "(" & (@HOUR & " " & ":" & @MIN) & ")" & @CRLF & $name &@CRLF & GUICTrlRead($edit))
WEnd
If $ConnectedSocket <> -1 Then TCPCloseSocket( $ConnectedSocket )
[/autoit] [autoit][/autoit] [autoit]TCPShutDown()
[/autoit] [autoit][/autoit] [autoit]; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
"ptr",DLLStructGetPtr($sockaddr),"int_ptr",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
Weis da jemand was dazu