Hallo
Ich hab ma wieder ein Problem.
Und zwar versuch ich grade nen TCP - Chat selbst zu schreiben,
klar, gibts schon massig, und auch viel bessere als meinen,
doch die Betonung liegt auf selbst
So.
Das Problem ist, dass ich nicht weiß, was mein Problem ist xD
Das funzt einfach ma wieder nicht, und wahrscheinlich
ist der Fehler so banal und einfach, dass ich mich nachher schämen
muss dafür n neues Topic erstellt zu haben
Alsoo.. connecten funzt..
aber die Nachrichten kommen nicht an..
bitte überseht Feinheiten und Stellen, wo ichs kürzen könnte,
der Feinschliff kommt später
Ach, und wenn euch meine Variablennamen nicht gefallen,...
helft mir, ich bin immer so unkreativ
Hab ich jz alles gesagt was ihr wissen müsst...?
ahja, mein Code:
(SocketToIP hab ich aus der Hilfe übernommen )
Für Schäden an Augen oder Hirn aufgrund beschi****** Code übernehme
ich grundsätzlich keine Haftung.
Lesen auf eigene Gefahr.
Kinder haften für ihre Eltern.
Spoiler anzeigen
Dim $connected = 0
Dim $mainsocket
Dim $in_connector = 0
TCPStartup()
[/autoit] [autoit][/autoit] [autoit]$mysocket = TCPListen( Inputbox( "Verbindung ermöglichen", "Bitte gib hier deine IP an." ), 1337 )
$myname = InputBox( "Dein Name", "Bitte gib hier deinen Namen ein." )
If @error = 1 Then Exit
#include <GuiConstants.au3>
Opt( "GUIOnEventMode", 1 )
Opt( "TrayAutoPause", 0 )
$main = GuiCreate("Chat", 237, 310,-1, -1 )
$Edit_income = GuiCtrlCreateEdit("", 20, 40, 190, 160, $ES_READONLY )
$Edit_output = GuiCtrlCreateEdit("", 20, 210, 190, 50)
$Button_send = GuiCtrlCreateButton("senden", 40, 270, 150, 20, $BS_DEFPUSHBUTTON )
GUICtrlSetState( $Button_send, $GUI_DISABLE )
GUICtrlSetOnEvent( $Button_send, "_senden" )
$menu = GUICtrlCreateMenu( "Verbinden" )
$menu_verbinden = GUICtrlCreateMenuitem( "Verbindung herstellen mit...", $menu )
GUICtrlSetOnEvent( $menu_verbinden, "_verbinden" )
GUISetOnEvent( $GUI_EVENT_CLOSE, "_exit" )
GuiSetState()
While 1
If $connected = 1 Then
$get = TCPRecv( $mainsocket, 2048 )
If Not $get = "" Then
GUICtrlSetData( $Edit_income, GUICtrlRead( $Edit_income ) & @CRLF & $yourname & ":" & $get )
EndIf
EndIf
If $connected = 1 And GUICtrlGetState( $Button_send ) = $GUI_DISABLE Then
GUICtrlSetState( $Button_send, $GUI_ENABLE )
ElseIf $connected = 0 And GUICtrlGetState( $Button_send ) = $GUI_ENABLE Then
GUICtrlSetState( $Button_send, $GUI_DISABLE )
EndIf
If $connected = 0 And $in_connector = 0 Then
$yoursocket = TCPAccept( $mysocket )
If $yoursocket <> -1 Then
$in_connector = 1
MsgBox( 0, "Verbunden", "Jemand hat eine Verbindung zu dir aufgebaut.", 5 )
$income_connection = TCPConnect( SocketToIP( $yoursocket ), 1337 )
If $income_connection = -1 Then
MsgBox( 0, "Error", "Verbindung fehlgeschlagen. Er/Sie kann keine Nachrichten von dir empfangen.", 5 )
Else
$connected = 1
GUICtrlSetState( $Button_send, $GUI_ENABLE )
EndIf
EndIf
EndIf
Sleep( 300 )
WEnd
Func _exit()
Exit
EndFunc
Func OnAutoItExit()
TCPShutdown()
EndFunc
Func _verbinden()
Opt( "GUIOnEventMode", 0 )
$con = GuiCreate("Einstellungen", 182, 220,-1, -1 )
$Input_3 = GuiCtrlCreateInput("Die IP zum connecten", 20, 30, 140, 20)
$Group_5 = GuiCtrlCreateGroup("Daten des Freundes", 10, 10, 160, 80)
$Input_6 = GuiCtrlCreateInput("Name des Freundes", 20, 60, 140, 20)
$Button_7 = GuiCtrlCreateButton("OK", 10, 190, 80, 20)
$Button_8 = GuiCtrlCreateButton("Abbrechen", 90, 190, 80, 20)
GuiSetState()
Sleep( 1000 )
Dim $a = 0
While $a = 0
$msg = GuiGetMsg()
Select
Case $msg = $Button_8
GUIDelete()
Opt( "GUIOnEventMode", 1 )
ExitLoop
Case $msg = $Button_7
$yourname = GUICtrlRead( $Input_6 )
$yourip = GUICtrlRead( $Input_3 )
For $i = 1 To 5
$yoursocket = TCPConnect( $yourip, 1337 )
GUISwitch( $main )
GUICtrlSetData( $Edit_income, GUICtrlRead( $Edit_income ) & @CRLF & "Verbinungsversuch - " & $i )
GUISwitch( $con )
If $yoursocket <> -1 Then
GUISwitch( $main )
GUICtrlSetData( $Edit_income, GUICtrlRead( $Edit_income ) & @CRLF & "Verbindung hergestellt." )
GUISwitch( $con )
GUIDelete()
$connected = 1
GUICtrlSetState( $Button_send, $GUI_ENABLE )
$a = 1
Opt( "GUIOnEventMode", 1 )
ExitLoop
EndIf
Next
If $yoursocket = -1 Then
GUISwitch( $main )
GUICtrlSetData( $Edit_income, GUICtrlRead( $Edit_income ) & @CRLF & "Verbindung fehlgeschlagen." )
GUISwitch( $con )
GUIDelete()
Opt( "GUIOnEventMode", 1 )
ExitLoop
EndIf
EndSelect
WEnd
EndFunc
Func _senden()
$send = GUICtrlRead( $Edit_output )
TCPSend( $yoursocket, $send )
GUICtrlSetData( $Edit_output, "" )
GUICtrlSetData( $Edit_income, GUICtrlRead( $Edit_income )& @CRLF & $myname & ": " & $send )
EndFunc
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
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc