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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Коннект

Ответить
Настройки темы
[решено] Коннект

Аватара для morgan1991

Старожил


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

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


Изменения
Автор: morgan1991
Дата: 15-02-2009
Помогите плиз сделать скрипт состоящий из клиента и сервера. Клиент состоит из окна и 6 кнопок по нажатию кнопки в зависимости от нажатой серверу отправляется символ а тот в свою очередь запускает функцию в зависимости от символа. Пытался делать сам но не конектит, только на локалке а на другой комп не конектит. + Конектиться он долже по паролю.

-------
Хочу научиться писать драйвера на с++


Отправлено: 15:37, 15-02-2009

 

Googler


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

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


Цитата morgan1991:
Пытался делать сам но не конектит, только на локалке а на другой комп не конектит »
Поиграйте для начала готовыми примерами из справки для клиента (ф-ция TCPSend) и сервера (ф-ция TCPRecv). При запуске клиента на другом компе не забудьте задать $szIPADDRESS равным IP-адресу сервера (вместо макроса @IPAddress1).
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:09, 16-02-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для morgan1991

Старожил


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

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


Спасибо

-------
Хочу научиться писать драйвера на с++


Отправлено: 17:45, 16-02-2009 | #3


Аватара для morgan1991

Старожил


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

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


Сделал так:

Сервер:


Код: Выделить весь код
#RequireAdmin

;SERVER!! Start Me First !!!!!!!!!!!!!!!
#include <GUIConstants.au3>

; Set Some reusable info
; Set your Public IP address (@IPAddress1) here.
Dim $szIPADDRESS = @IPAddress1
Dim $nPORT = 33891

; Start The TCP Services
;==============================================
TCPStartUp()

; Create a Listening "SOCKET".
;   Using your IP Address and Port 33891.
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT)

; If the Socket creation fails, exit.
If $MainSocket = -1 Then Exit

; Create a GUI for messages
;==============================================

; Initialize a variable to represent a connection
;==============================================
Dim $ConnectedSocket = -1

;Wait for and Accept a connection
;==============================================
Do
    $ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1

; Get IP of client connecting

Dim $msg, $recv
; GUI Message Loop
;==============================================
While 1
   $msg = GUIGetMsg()

; GUI Closed
;--------------------

; Try to receive (up to) 2048 bytes
;----------------------------------------------------------------
    $recv = TCPRecv( $ConnectedSocket, 2048 )

; If the receive failed with @error then the socket has disconnected
;----------------------------------------------------------------
    If @error Then
        TCPShutDown()
        ShellExecute(@ScriptFullPath)
        Exit
    EndIf

; Update the edit control with what we have received
;----------------------------------------------------------------
    If $recv <> "" Then seporate($recv)
WEnd

If $ConnectedSocket <> -1 Then TCPCloseSocket( $ConnectedSocket )

TCPShutDown()

Func seporate($reckkk)
    If $recv = "test" Then test()
    If $recv = "quit" Then quit()
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

    Return $aRet
EndFunc

Func test()
        MsgBox(16, "шгнеш", "гшшгшлршгр")
EndFunc

Func quit()
        MsgBox(16, "шгнеш", "гшшгшлршгр")
EndFunc
Клиент:

Код: Выделить весь код
;CLIENT! Start Me after starting the SERVER!!!!!!!!!!!!!!!
; see TCPRecv example
#include <GUIConstants.au3>

; Start The TCP Services
;==============================================
TCPStartUp()

; Set Some reusable info
;--------------------------
; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
Dim $szIPADDRESS = InputBox("uuu", "Введите IP адрес сервера:")
Dim $nPORT = 33891

; Initialize a variable to represent a connection
;==============================================
Dim $ConnectedSocket = -1

;Attempt to connect to SERVER at its IP and PORT 33891
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)

Dim $szData

; If there is an error... show it
If @error Then
    MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)
; If there is no error loop an inputbox for data
;   to send to the SERVER.
Else
;Loop forever asking for data to send to the SERVER
    While 1
    ; InputBox for data to transmit
        $szData = InputBox("Data for Server",@LF & @LF & "Enter data to transmit to the SERVER:")

    ; If they cancel the InputBox or leave it blank we exit our forever loop
        If @error Or $szData = "" Then ExitLoop

    ; We should have data in $szData... lets attempt to send it through our connected socket.
        TCPSend($ConnectedSocket,$szData)

    ; If the send failed with @error then the socket has disconnected
    ;----------------------------------------------------------------
        If @error Then ExitLoop
    WEnd
EndIf
Дак вот как сделать так чтобы сервер мог тоже отвечать клиенту, а клиент как и сервер в зависимости от принятой команды выполнял определённую функцию?

-------
Хочу научиться писать драйвера на с++


Отправлено: 16:56, 05-03-2009 | #4


Аватара для morgan1991

Старожил


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

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


насколько я понял можно просто в файл сервера воткнуть всё из файла клиента и наооборот, потом поменять имена переменных и порт, и получится двусторонняя связь.
Но вот такой вопросик как сделать чтобы клиент мог конектиться по паролю? Или хотябы скажите как сервер может отсоеденить клиента от себя? И ещё как сделать чтобы можно было с нескольких компов приконектиться к серверу одновреммено?

-------
Хочу научиться писать драйвера на с++


Отправлено: 20:55, 09-03-2009 | #5


Аватара для morgan1991

Старожил


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

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


Так и не получилось у меня создать двустороннюю связь, помогите пожалуйста...

-------
Хочу научиться писать драйвера на с++


Отправлено: 23:26, 12-03-2009 | #6


Аватара для proxy

Старожил


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

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


что то подсказывает, что это autoit-у тяжело дастят....не думал попробовать сделать на файлах?
к примеру все обращение передовать через ини или базу какую нить...

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


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


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


Аватара для morgan1991

Старожил


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

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


amel27, спасибо

-------
Хочу научиться писать драйвера на с++


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


Аватара для morgan1991

Старожил


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

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


Такая вот проблемка конектюсь к серверу, потом одновременно конектюсь с другого компа и у второго клиента с виду всё норм но на самом деле сервер его запросы не обрабатывает, а первый нормально работает. Дак вот такой вопросик: как сделать чтобы конектиться к серверу одновременно мог только один человек? И ещё как сервер может отсоеденить от себя клиент который уже приконектился?

-------
Хочу научиться писать драйвера на с++


Отправлено: 21:58, 14-03-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Коннект

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Коннект к удаленному серверу Artem-Samsung Вебмастеру 1 13-08-2009 01:06
[решено] Обрывается VPN подключение. Коннект с Win XP на Win server 2003 _soldat_ Microsoft Windows NT/2000/2003 3 06-12-2008 02:16
[решено] [решено] медленный коннект к ftpd pom3ec Общий по FreeBSD 11 17-11-2006 19:57
Коннект с Инетом !!! The Time Microsoft Windows 95/98/Me (архив) 1 06-05-2005 07:02
Коннект по ФТП byka Сетевые технологии 9 14-05-2004 00:18




 
Переход