Chat zwieschen zwei PCs

  • Hallo
    Ich habe gerade ein Chatprogramm geschrieben.

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GUIConstants.au3>
    Dim $Mode = 0, $LocalMode = 1, $myIPADDRESS = @IPAddress1, $nPORT = 80, $ConnectedSocket = -1, $szIPADDRESS = "000.000.000.000", $TimeOut = 60
    $Form1 = GUICreate("", 514, 367, 298, 212)
    $Read = GUICtrlCreateEdit("", 8, 8, 497, 321, BitOR($ES_AUTOVSCROLL,$WS_VSCROLL))
    $Write = GUICtrlCreateInput("", 8, 336, 417, 21)
    $Send = GUICtrlCreateButton("Senden", 432, 336, 75, 21, $BS_DEFPUSHBUTTON)
    $Form2 = GUICreate("Client/Server", 161, 235, 304, 220)
    $GroupMode = GUICtrlCreateGroup("Client/Server", 8, 8, 145, 49)
    $Radio1Mode = GUICtrlCreateRadio("Client", 16, 32, 65, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Radio2Mode = GUICtrlCreateRadio("Server", 80, 32, 57, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $GroupOptions = GUICtrlCreateGroup("Client", 8, 64, 145, 161)
    $Label1Opt = GUICtrlCreateLabel("Geben Sie Portnummer ein:", 16, 80, 133, 17)
    $Input1Opt = GUICtrlCreateInput($nPort, 56, 104, 49, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    $Label2Opt = GUICtrlCreateLabel("Geben Sie Server-IP ein:", 16, 136, 129, 17, $SS_CENTER)
    $Input2Opt = GUICtrlCreateInput($szIPADDRESS, 24, 160, 113, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    $Button1Opt = GUICtrlCreateButton("Verbinden", 40, 192, 83, 25, $BS_DEFPUSHBUTTON )
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW, $Form2)
    While 1
    $nMsg = GUIGetMsg()
    If $ConnectedSocket <> -1 Then $recv = TCPRecv( $ConnectedSocket, 2048 )
    If @error Then Exit
    If $Mode = 0 Then
    Switch $nMsg
    Case $Button1Opt
    GUICtrlSetState($Input1Opt, $GUI_DISABLE)
    GUICtrlSetState($Input2Opt, $GUI_DISABLE)
    $nPORT = GUICtrlRead( $Input1Opt )
    If $LocalMode = 1 Then
    GUICtrlSetState($Button1Opt, $GUI_DISABLE)
    $szIPADDRESS = GUICtrlRead( $Input2Opt )
    TCPStartUp()
    $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)
    If @error Then
    MsgBox(4112,"Error","Connect failed with WSA error: " & @error)
    GUICtrlSetState($Input1Opt, $GUI_ENABLE)
    GUICtrlSetState($Input2Opt, $GUI_ENABLE)
    GUICtrlSetState($Button1Opt, $GUI_ENABLE)
    TCPShutdown()
    Else
    $Mode = 1
    $szIPADRESS = SocketToIP($ConnectedSocket)
    GUISetState(@SW_HIDE, $Form2)
    GUISetState(@SW_SHOW, $Form1)
    EndIf
    ElseIf $LocalMode = 2 Then
    GUICtrlSetData($Button1Opt, "Abbrechen")
    $TimeOut = GUICtrlRead($Input2Opt)
    TCPStartup()
    $MainSocket = TCPListen($myIPADDRESS, $nPORT)
    $sec=@SEC
    Do
    Sleep(10)
    $nMsg = GUIGetMsg()
    $ConnectedSocket = TCPAccept($MainSocket)
    If $sec<>@SEC Then
    $sec=@SEC
    GUICtrlSetData($Input2Opt,GUICtrlRead($Input2Opt)-1)
    If GUICtrlRead($Input2Opt) = 0 Then $ConnectedSocket = -2
    EndIf
    If $nMsg = $GUI_EVENT_CLOSE Then
    TCPCloseSocket($MainSocket)
    TCPShutdown()
    Exit
    ElseIf $nMsg = $Button1Opt Then
    $ConnectedSocket = -2
    EndIf
    Until $ConnectedSocket <> -1
    If $ConnectedSocket <> -2 Then
    $szIPADRESS = SocketToIP($ConnectedSocket)
    $Mode = 1
    GUISetState(@SW_HIDE, $Form2)
    GUISetState(@SW_SHOW, $Form1)
    Else
    TCPCloseSocket($MainSocket)
    TCPShutdown()
    GUICtrlSetState($Input1Opt, $GUI_ENABLE)
    GUICtrlSetState($Input2Opt, $GUI_ENABLE)
    GUICtrlSetData($Input2Opt, $TimeOut)
    GUICtrlSetData($Button1Opt, "Start")
    $ConnectedSocket = -1
    EndIf
    EndIf
    Case $Radio1Mode
    If $LocalMode <> 1 Then
    $LocalMode = 1
    GUICtrlSetData($Label2Opt, "Geben Sie Server-IP ein:")
    GUICtrlSetData($Input2Opt, $szIPADDRESS)
    GUICtrlSetData($Button1Opt, "Verbinden")
    EndIf
    Case $Radio2Mode
    If $LocalMode <> 2 Then
    $LocalMode = 2
    GUICtrlSetData($Label2Opt, "Auf Verbindung warten")
    GUICtrlSetData($Input2Opt, $TimeOut)
    GUICtrlSetData($Button1Opt, "Starten")
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    ElseIf $Mode = 1 Then
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    Exit
    Case $Send
    $szData = GUICtrlRead($Write)
    If $szData <> '' Then
    TCPSend($ConnectedSocket,$szData)
    If @error Then Exit
    GUICtrlSetData($Read,'127.0.0.1>' & $szData & @CRLF & GUICtrlRead($Read))
    GUICtrlSetData($Write,'')
    EndIf
    EndSwitch
    If $recv <> "" Then GUICtrlSetData($Read,$szIPADRESS & '>' & $recv & @CRLF & GUICtrlRead($Read))
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]


    Kann ich an dem Code noch etwas verbessern?
    (Ist noch Alphaversion, am Ende will ich ein Programm haben, das Daten verschlüsselt, Dateiübertragung und Remotesteuerung ermöglicht, und schöneren GUI hat.)

    2 Mal editiert, zuletzt von Gast (6. November 2007 um 18:39)

  • Hallo.

    Also ich finde der Chat hat doch was. Bin auf die weitere Entwicklung gespannt.

    Schön im Intranet mal kurz chatten, oder von einem Raum in den anderen Raum schweigsam was rüber senden.

    Ja, mach weiter so.

    Gruss, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr