Скорость передачи ФТП и ...

Тема в разделе "WASM.NETWORKS", создана пользователем calidus, 23 ноя 2007.

  1. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Вопрос по сети ...у меня есть протокол обмена на асинхронных сокетах на асме ..... 1 поток ...с подтверждением доставки ...то есть ушел пакет и ждет пока ответ придет ....максимум ждет 50 сек или по событию доставки ...то есть назад ответ пришел что да принял ..и сразу 50 сек отменяются на локалке работает быстро в нете ультра медленно .... папку систем 32 получаю список оч долго ....а вот ФТП сервер ...на асме получает за 3 секи все папки с систем 32 ... почему так ? может слишком часто вызываю послать принять ???
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    calidus
    Советую изучить как работает TCP. Посылается куча пакетов сразу, а после и/или паролельно ловяться ответы. Если какогото пакет нет (не дошел) то посылается запрос на его получение.
    Так что отпровляем потоком. И чем больше поток тем лучше. А то с мелкими файлами возиться будет долго.
    Заодно советую изучить FTP протокол.
     
  3. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    да но я просто не знаю если их 300 откуда мне знать какой не дошел .... изучаю постепенно ..посоветуешь по фтп инфу полезную может ??? только не офицальную ...куча мала , сугубо она техническая ... ченить чтоб изучать ...
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    calidus
    А тебе это и не нужно. За тебя все сделает протокол TCP осталось только им воспользоваться.
     
  5. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Все сделает ? Ну пусть я тупой ... но уже пол года я насилую каждый день свой программу ...уже тысячи вариантов перепробовпал и хрен ... каждый кто специалист , смотрел и потом говорил я не знаю ...

    Смысл прост есть у меня сейчас протокол передачи уже не такой как раньше ... он имеет структуру из 7 пунктов формируется собственный пакет ...потом отсылается, в пакете есть определитель сервера что типо гот него ..данные ..адресс на данные длинна данных , это единственное что я нашел достойное ...потом в локалке все круто !!! быстро работает , а вот в сети после 2 ого посланного пакета не работает , всмысле все пакеты хер знает куда делись ...хотя на той стороне они отправлены а на этой не приняты , даже не пришло ничего .....вот прилагаю начальный вариант я его менял менял уже буфер для накопления делал ... ни как ....кстати сетевые программы точно также многие на асме .... вроде по описанию круто ...а потом испытать взял и в сети все накрылась ...
    а протокол фтп я смотрел , но разницу так и не усмотрел
    Код (Text):
    1. NRPacket         STRUCT
    2.   nrHeader       db         "NRP-"
    3.   nrFCode        dd         ?
    4.   nrPacketSeqNR  dd         ?
    5.   nrPacketInSeq  dd         ?
    6.   nrLenData      dd         ?
    7. ;  nrDataCRC32    dd         ?          
    8.   nrPointData    dd         ?
    9.   nrTail         dd         ?
    10. NRPacket         ENDS
    11.  
    12. packet           NRPacket    <>              
    13. packetHEAD       db          "NRP-"
    14. packetENDSEQ     db          "-ENP"
    15. packetNEXTSEQ    db          "-SEQ"
    16.  
    17. packetBUFFER     db          1024+24 dup(0)
    18.  
    19. isReliable       dd          FALSE            
    20. receiveLOCK      dd          FALSE
    21. fConn            dd          FALSE
    22. isHandshake      dd          FALSE
    23.  
    24. socketDESCRIPTOR DD          0            
    25. remoteDESCRIPTOR dd          0
    26. serverLISTENPORT dd          57341            
    27.  
    28. clientID         db          "NSClient-sPISPJ99"
    29. cIDLEN           dd          $-clientID
    30. serverID         db          "NSServer-sPISPJ99"
    31. sIDLEN           dd          $-serverID
    Код (Text):
    1.                                                        .ELSEIF uMsg == WM_SOCKET
    2. ;#####################################;########################################################################################
    3.  
    4. ;#####################################
    5. ; Соединение
    6. ;#########################################################
    7. mov eax,lParam
    8.                               .IF ax == FD_ACCEPT
    9.  ;########################################################################################
    10. shr ax,16
    11. .IF ax == NULL; ; отсутствует ошибка
    12. ;###################################
    13. invoke accept,socketDESCRIPTOR,0,0
    14. mov remoteDESCRIPTOR,eax
    15.                              mov     isHandshake, TRUE
    16.                              mov     receiveLOCK, FALSE
    17.                             ; INVOKE     MessageBox, NULL, addr AppName, addr AppName, MB_OK
    18. ;invoke MessageBox,NULL,addr Done,ADDR AppName,MB_OK
    19. ;#####################################
    20. .ENDIF
    21.  
    22.  
    23. ; Получения команды от клиента
    24.                             .ELSEIF ax == FD_READ
    25.  
    26. INVOKE  ProcessIncoming
    27.      
    28.                                                               .ELSEIF ax == FD_WRITE
    29. ;########################################################################################
    30.  
    31.  
    32.  
    33.  
    34.                                                                    .ELSEIF ax == FD_CLOSE
    35. ;########################################################################################
    36.                              .IF fConn==TRUE
    37.                                  INVOKE  ShutdownSocket, socketDESCRIPTOR
    38.                                  INVOKE  OpenSocket
    39.                                  .IF eax==0
    40.                                      mov     fConn, FALSE
    41.                                  .ELSE
    42.                                       mov     socketDESCRIPTOR, eax
    43.                                       invoke WSAAsyncSelect,socketDESCRIPTOR,hwnd2,WM_SOCKET,FD_ACCEPT+FD_READ+FD_WRITE+FD_CLOSE+FD_CONNECT
    44.                                       INVOKE  bind, socketDESCRIPTOR, ADDR sin, sizeof sin
    45.                                       INVOKE  listen, socketDESCRIPTOR, 20
    46.                                  .ENDIF
    47.                                   .ENDIF
    48.                                                                    .ELSEIF ax == FD_CONNECT
    49. ;########################################################################################
    50. nop
    51. .ENDIF
    52. ;####################################################################################
    53. ;####################################################################################
    54. .ELSEIF
    55. invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    56. ret
    57. .ENDIF
    Код (Text):
    1. ProcessIncoming   PROC
    2.  
    3.                   .IF isHandshake==TRUE
    4.  
    5.                       INVOKE  ioctlsocket, remoteDESCRIPTOR, FIONREAD, ADDR availableData
    6.                       .IF eax==NULL
    7.                           INVOKE  GlobalAlloc, GHND, availableData
    8.                           mov     hMemory, eax
    9.                           INVOKE  GlobalLock, eax
    10.                           mov     offsetBuffer, eax
    11.                
    12.                           INVOKE  recv, remoteDESCRIPTOR, offsetBuffer, availableData, 0
    13.                          
    14.                           INVOKE  StrCmp, ADDR clientID, offsetBuffer, cIDLEN
    15.                           .IF eax==TRUE
    16.                               mov     isReliable, TRUE
    17.                               mov     isHandshake, FALSE
    18.  
    19.                               INVOKE  send, remoteDESCRIPTOR, ADDR serverID, sIDLEN, 0
    20.                               .IF eax==0 || eax==SOCKET_ERROR
    21.                                   mov     eax, FALSE
    22.                               .ELSE
    23.                                    mov     eax, TRUE
    24.                               .ENDIF
    25.    
    26.                               .IF eax==FALSE
    27.                                   INVOKE  ShutdownSocket, socketDESCRIPTOR                                    
    28.                                   INVOKE  OpenSocket
    29.                                   .IF eax==0
    30.                                       mov     fConn, FALSE
    31.                                   .ELSE
    32.                                        mov     socketDESCRIPTOR, eax
    33.                                        INVOKE  WSAAsyncSelect, socketDESCRIPTOR, hwnd2, WM_SOCKET, FD_ACCEPT + FD_READ + FD_CLOSE
    34.                                        INVOKE  bind, socketDESCRIPTOR, ADDR sin, 16
    35.                                        INVOKE  listen, socketDESCRIPTOR, 20
    36.                                        mov     fConn, TRUE
    37.                                   .ENDIF                                                
    38.                               .ENDIF
    39.  
    40.                            .ELSE
    41.                                 INVOKE  ShutdownSocket, socketDESCRIPTOR
    42.                                 INVOKE  OpenSocket
    43.                                 .IF eax==0
    44.                                     mov     fConn, FALSE
    45.                                 .ELSE
    46.                                      mov     socketDESCRIPTOR, eax
    47.                                      INVOKE  WSAAsyncSelect, socketDESCRIPTOR, hwnd2, WM_SOCKET, FD_ACCEPT + FD_READ + FD_CLOSE
    48.                                      INVOKE  bind, socketDESCRIPTOR, ADDR sin, sizeof sin
    49.                                      INVOKE  listen, socketDESCRIPTOR, 20
    50.                                      mov     fConn, TRUE
    51.                                 .ENDIF                                                
    52.  
    53.                             mov     isHandshake, FALSE
    54.                             mov     receiveLOCK, FALSE
    55.                            .ENDIF
    56.  
    57.                            INVOKE  GlobalUnlock, offsetBuffer
    58.                            INVOKE  GlobalFree, hMemory
    59.                            ret
    60.                       .ENDIF                  
    61.                   .ENDIF
    62.  
    63.                   .IF isReliable==TRUE
    64.                  
    65.                       INVOKE  ioctlsocket, remoteDESCRIPTOR, FIONREAD, ADDR availableData
    66.                       .IF eax==NULL
    67.                           .IF availableData<=1048
    68.                               INVOKE  recv, remoteDESCRIPTOR, ADDR packetBUFFER, availableData, 0
    69.                               ;invoke MessageBox,NULL,ADDR packetBUFFER,ADDR AppName,MB_OK
    70.                           .ELSE
    71.                                INVOKE  recv, remoteDESCRIPTOR, ADDR packetBUFFER, 1048, 0                          
    72.                           .ENDIF
    73.  
    74.                           ; controllo header
    75.  ;invoke MessageBox,NULL,ADDR packetHEAD,ADDR AppName,MB_OK
    76.  ;invoke MessageBox,NULL,ADDR packetBUFFER,ADDR AppName,MB_OK
    77.                           INVOKE  StrCmp, ADDR packetHEAD, ADDR packetBUFFER, 4
    78.                        
    79.                           .IF eax==TRUE
    80.  
    81.                               ; get function code
    82.                                
    83.                               mov     esi, OFFSET packetBUFFER
    84.                               add     esi, 4
    85.                               lodsd  
    86.  
    87.                               push    eax
    88.  
    89.                               .IF receiveLOCK==FALSE
    90.                            
    91.                                   mov     reqOperation, eax
    92.  
    93.                                   mov     currentPacket, 0
    94.                                
    95.                                   ; get total packets number & alloc buffer
    96.  
    97.                                   mov     esi, OFFSET packetBUFFER
    98.                                   add     esi, 12
    99.                                   lodsd
    100.  
    101.                                   mov     totalPackets, eax
    102.                                   shl     eax, 10
    103.  
    104.                                   INVOKE  GlobalAlloc, GHND, eax
    105.                                   mov     hMemory, eax
    106.                                   INVOKE  GlobalLock, eax
    107.                                   mov     offsetBuffer, eax
    108.                                   mov     receiveLOCK, TRUE
    109.                               .ENDIF
    110.                               pop     eax
    111.  
    112.                               .IF eax==reqOperation
    113.                                   inc     currentPacket
    114.  
    115.                                   ; get data length & copy data into buffer
    116.  
    117.                                   mov     esi, OFFSET packetBUFFER
    118.                                   add     esi, 16
    119.                                   lodsd
    120.                                   mov     ebx, currentPacket
    121.                                   dec     ebx
    122.                                   shl     ebx, 10
    123.                                   mov     edi, offsetBuffer
    124.                                   add     edi, ebx
    125.                                   mov     ecx, eax
    126.                                   rep     movsb
    127.                                                                                                      
    128.                                   mov     eax, currentPacket
    129.                                   .IF eax==totalPackets  
    130.                                      
    131.                                       ; processo funzioni, dealloco buffers, receiveLOCK==FALSE
    132.  
    133.                                      .IF reqOperation==00000000h
    134.                                         ; INVOKE  nsRemoveServer
    135. invoke MessageBox,NULL,ADDR AppName,ADDR AppName,MB_OK
    136.                                      .ELSEIF reqOperation==00000001h
    137.                                           ;   INVOKE  nsMessageBox, offsetBuffer
    138. invoke MessageBox,NULL,ADDR AppName,ADDR AppName,MB_OK
    139.                                      .ELSEIF reqOperation==00000002h
    140.                                            ;  INVOKE  nsDDEExecute, offsetBuffer
    141.  
    142.                                      .ENDIF
    143.  
    144.                                
    145.                                      INVOKE  GlobalUnlock, offsetBuffer
    146.                                      INVOKE  GlobalFree, hMemory
    147.  
    148.                                      mov    receiveLOCK, FALSE
    149.  
    150.                                   .ENDIF          
    151.                               .ENDIF
    152.                           .ENDIF
    153.                       .ENDIF
    154.                   .ENDIF  
    155.  
    156.                   INVOKE  ClearBuffer, ADDR packetBUFFER, 1024+24
    157.  
    158.                   ret
    159. ProcessIncoming   ENDP
    Код (Text):
    1. SendCommand       PROC    reqOP:DWORD, dataPTR:DWORD, usableSOCKET:DWORD
    2.  
    3.            
    4.  
    5.                   .IF dataPTR!=NULL
    6.                       INVOKE  StrLen, dataPTR
    7.                   .ELSE
    8.                       xor     eax,eax
    9.                   .ENDIF
    10.  
    11.  
    12.                  
    13.  
    14.                   shr     eax, 10
    15.                   inc     eax                        ;uno in + per il controllo
    16.                   mov     packet.nrPacketInSeq, eax
    17.  
    18.                   ; 3. loop interno -> fill del packetBUFFER e invio (.WHILE eax<nrPacketInSeq, dove eax=nrPacketSeqNR)
    19.  
    20.                   xor     eax, eax
    21.  
    22.                   .WHILE  eax<packet.nrPacketInSeq
    23.                          
    24.                           push    eax
    25.  
    26.                           mov     packet.nrPacketSeqNR, eax      
    27.  
    28.                           mov     eax, reqOP                    
    29.                           mov     packet.nrFCode, eax
    30.                          
    31.                           pop     eax
    32.                           push    eax
    33.  
    34.  
    35.                           .IF dataPTR==NULL
    36.                               mov     packet.nrLenData, 0
    37.                               mov     packet.nrPointData, NULL
    38.                               mov     esi, OFFSET packetENDSEQ
    39.                               mov     edi, OFFSET packet.nrTail
    40.                               movsd
    41.                           .ELSE
    42.                                mov     ebx, packet.nrPacketInSeq
    43.                                dec     ebx
    44.  
    45.                                .IF eax==ebx
    46.                                    mov      ebx, eax                  
    47.                                    .IF ebx==0                        
    48.                                        INVOKE   StrLen, dataPTR
    49.                                        mov      packet.nrLenData, eax
    50.                                        mov      eax, dataPTR
    51.                                        mov      packet.nrPointData, eax
    52.                                    .ELSE
    53.                                         mov      ebx, dataPTR
    54.  
    55.                                         shl      eax, 10
    56.                                         add      ebx, eax
    57.                                         mov      inSendBuffer, ebx
    58.                                         INVOKE   StrLen, inSendBuffer
    59.                                         mov      packet.nrLenData, eax
    60.                                         mov      ebx, dataPTR
    61.                                         mov      eax, packet.nrPacketInSeq
    62.                                         dec      eax
    63.                                         shl      eax, 10
    64.                                         add      ebx, eax
    65.                                         mov      packet.nrPointData, ebx
    66.                                    .ENDIF
    67.  
    68.                                    mov      esi, OFFSET packetENDSEQ  
    69.                                    mov      edi, OFFSET packet.nrTail
    70.                                    movsd
    71.  
    72.                                .ELSE
    73.                                     mov     packet.nrLenData, 1024  
    74.                                     shl     eax, 10
    75.                                     mov     ebx, dataPTR
    76.                                     add     ebx, eax
    77.                                     mov     packet.nrPointData, ebx
    78.  
    79.                                     mov     esi, OFFSET packetNEXTSEQ
    80.                                     mov     edi, OFFSET packet.nrTail
    81.                                     movsd
    82.                                .ENDIF                          
    83.                           .ENDIF
    84.  
    85.                      
    86.  
    87.                           mov     edi, OFFSET packetBUFFER
    88.                           mov     esi, OFFSET packet.nrHeader
    89.                           movsd
    90.                           mov     esi, OFFSET packet.nrFCode
    91.                           movsd
    92.  
    93.                           mov     esi, OFFSET packet.nrPacketSeqNR
    94.                           movsd
    95.                           mov     esi, OFFSET packet.nrPacketInSeq
    96.                           movsd
    97.  
    98.                           .IF dataPTR==NULL
    99.                               xor      eax, eax
    100.                               stosd
    101.                               stosd
    102.                           .ELSE
    103.                                mov     esi, OFFSET packet.nrLenData
    104.                                movsd
    105.                                mov     esi, packet.nrPointData
    106.                                mov     ecx, packet.nrLenData
    107.                                rep     movsb
    108.                           .ENDIF
    109.  
    110.                           mov     esi, OFFSET packet.nrTail
    111.                           movsd
    112.  
    113.                      
    114.  
    115.                           mov     eax, packet.nrLenData
    116.                           add     eax, 4+4+4+4+4+4
    117.  
    118.                           INVOKE  send, usableSOCKET, ADDR packetBUFFER, eax, 0
    119.                           .IF eax==0 || eax==SOCKET_ERROR
    120.                               INVOKE  ClearBuffer, ADDR packetBUFFER, 1024+24
    121.  
    122.                               ret
    123.                           .ENDIF
    124.  
    125.                           ; -- clear buffer
    126.  
    127.                           INVOKE  ClearBuffer, ADDR packetBUFFER, 1024+24
    128.  
    129.                          
    130.  
    131.                           pop     eax
    132.                           inc     eax
    133.                   .ENDW
    134.  
    135.                   ret
    136. SendCommand       ENDP