Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: [решено] Коннект
Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата morgan1991:
Так и не получилось у меня создать двустороннюю связь »
простой двусторонний чат на базе примера из справки:
Код: Выделить весь код
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)

Example()

Func Example()
    Local $szIPLocal  = @IPAddress1
    Local $szIPRemote = @IPAddress1
    Local $LocalPort  = 33892
    Local $RemotePort = 33891

    Local $MainSocket, $GOOEY, $InputSocket=-1, $OutputSocket=-1, $szIP_Accepted
    Local $Bttn1, $Bttn2, $Edit1, $Edit2
    Local $msg, $recv, $szData

    TCPStartup()
    $MainSocket = TCPListen($szIPLocal, $LocalPort)
    If $MainSocket = -1 Then Exit

    $GOOEY = GUICreate("My Server (IP: " & $szIPLocal & ")", 300, 250)
    $Edit1 = GUICtrlCreateEdit("", 10, 10, 280, 180)
    $Edit2 = GUICtrlCreateEdit("", 10, 190, 280, 20, 0)
    $Bttn1 = GUICtrlCreateButton("Connect!", 10, 217, 120)
    $Bttn2 = GUICtrlCreateButton("Send Text", 170, 217, 120)
    GUISetState()

    While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
        If $msg = $Bttn1 Then
            If GUICtrlRead($Bttn1)="Connect!" Then
                $OutputSocket = TCPConnect($szIPRemote, $RemotePort)
                If @error Then
                    MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
                Else
                    GUICtrlSetData($Bttn1, "Disconnect!")
                EndIf
            Else
                If $OutputSocket<> -1 Then TCPCloseSocket($OutputSocket)
                $OutputSocket=-1
                GUICtrlSetData($Bttn1, "Connect!")
            EndIf
        EndIf
        If $msg = $Bttn2 Then
            $szData = GUICtrlRead($Edit2)
            If $OutputSocket<>-1 And $szData<>"" Then
                TCPSend($OutputSocket, $szData)
                GUICtrlSetData($Edit1, $szIPLocal &" > "& $szData & @CRLF & GUICtrlRead($Edit1))
            EndIf
        EndIf

        $recv = TCPRecv($InputSocket, 2048)
        If @error Then
            $InputSocket = TCPAccept($MainSocket)
            If $InputSocket <> -1 Then $szIP_Accepted = SocketToIP($InputSocket)
        Else
            If $recv<>"" Then GUICtrlSetData($Edit1, $szIP_Accepted &" > "& $recv & @CRLF & GUICtrlRead($Edit1))
        EndIf
    WEnd

    If $InputSocket <> -1 Then TCPCloseSocket($InputSocket)
    If $OutputSocket<> -1 Then TCPCloseSocket($InputSocket)
    TCPShutdown()
EndFunc   ;==>Example

Func SocketToIP($SHOCKET)
    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   ;==>SocketToIP
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:03, 13-03-2009 | #8

Название темы: [решено] Коннект