Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 1 | 2 |

 

  Вопрос: Программа-сервер на асме Добавлено: 17.02.05 07:54  

Автор вопроса:  ZagZag | ICQ: 295002202 
Есть ли у кого пример программы-сервера (ждет входящее подключение) на
ассемблере. Очень желательно чтобы он не создавал своих окон.
Если есть на MASM32 выложите, пожалуйста.

Ответить

  Ответы Всего ответов: 19  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 17.02.05 08:23
http://wasm.ru/src/5/cserver.zip

Ответить

Номер ответа: 2
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #2 Добавлено: 17.02.05 08:50
cserver.asm

program:
INVOKE GetModuleHandle,0
mov hInstance,eax
INVOKE GetCommandLine
mov CommandLine,eax
INVOKE WinMain,hInstance,0,CommandLine,SW_SHOWDEFAULT
INVOKE ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,OFFSET WndProc
mov wc.cbClsExtra,0
mov wc.cbWndExtra,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszClassName,OFFSET ClassName
mov wc.lpszMenuName,0
INVOKE LoadIcon,hInstance,offset IcoName
mov wc.hIcon,eax
mov wc.hIconSm,eax
INVOKE LoadCursor,0,IDC_ARROW
mov wc.hCursor,eax
INVOKE WSAStartup,101h,offset wsadata     ;Use WinSock v1.1
INVOKE RegisterClassEx,addr wc            ;Make Dialog box.
INVOKE CreateDialogParam,hInstance,offset DlgName,0,0,0
mov hDlg,eax
INVOKE ShowWindow,hDlg,SW_SHOWNORMAL
INVOKE UpdateWindow,hDlg
.WHILE TRUE                             ;Main window loop
    INVOKE GetMessage,addr msg,0,0,0
    .BREAK .IF (!eax)
    INVOKE TranslateMessage,addr msg
    INVOKE DispatchMessage,addr msg
.ENDW
INVOKE WSACleanup                       ;Done with WinSock
mov eax,msg.wParam
ret
WinMain endp


Я вообщето без окон просил.. но и на этом огромное спасибо

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 17.02.05 11:42
Без окон еще проще - просто убираешь создание асинхронного сокета и при accept создаешь тред, куда передаешь хандл созданного acceptом сокета. Могу дать кусок своей программы на С++

Ответить

Номер ответа: 4
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #4 Добавлено: 17.02.05 11:53
Ну так убери регистрацию и создание окна, оставь WSAStartup, Message Loop и WSACleanup

Ответить

Номер ответа: 5
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #5
Добавлено: 17.02.05 19:53
cserver.asm - если это ТСР сервер тогда я летчик

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 17.02.05 20:37
Гы. Думаешь, я туда смотрел? :)

Ответить

Номер ответа: 7
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #7
Добавлено: 18.02.05 21:14
все, что здесь есть это:

INVOKE WSAStartup,101h,offset wsadata
INVOKE WSACleanup

это все сетевые вызовы проги! Даже и смотреть ненадо, само в глаза бросается. Ещё нужны вызовы socket, bind,listen, recv, send

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 18.02.05 21:27
Даже и смотреть ненадо, само в глаза бросается
Не, я пока не научился по названию архива определять содержимое файлов, сожержащихся в нем :) Может, научишь?

Ответить

Номер ответа: 9
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #9
Добавлено: 18.02.05 21:28
Ахахаха - accept забыл, гений :)

Ответить

Номер ответа: 10
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #10
Добавлено: 18.02.05 23:56
ну да, забыл...а что тебе не видно кода, что сверху???

Ответить

Номер ответа: 11
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #11 Добавлено: 19.02.05 01:54
DaSharm:
Подскажи пожалуйста алгоритм (читать: последовательность вызовов сетевых
апи) самого простого "сервера"

Sharp:
Я еще один "сервер" откопал (без окон)

Port equ 180
buffsz equ 256
.386
.model flat,stdcall
option casemap:none
include windows.inc

irp lb,<kernel32,wsock32,user32>
include &lb&.inc
includelib &lb&.lib
endm

threadproc proto

.data
capt  db "information",0
servername db 25 dup (0)

servermsg db "This message was send from server!",0
servermsgsz dd offset servermsgsz - offset servermsg
wsa  WSADATA <0>
sktaddr  sockaddr_in <0>
client  sockaddr_in <0>

skt  dd 0
thread  dd 0
junk  dd 0

sktaddrsz dd sizeof(sockaddr)
tmp  db buffsz dup (0)
server  db sizeof(sockaddr_in) dup (0)
.code
_Start:
 invoke WSAStartup,00010001h,offset wsa

 invoke CreateThread,0,0,offset threadproc,0,0,offset junk
 mov thread,eax

 invoke socket, AF_INET,\  ; Address family
   SOCK_DGRAM,\  ; Socket type
   IPPROTO_UDP  ; ProtocolAF_INET,SOCK_DGRAM,IPPROTO_UDP

 cmp eax,INVALID_SOCKET
 je noSock
 mov skt,eax

 mov ebx,offset server
 assume ebx:ptr sockaddr_in
 mov [ebx].sin_family,AF_INET
 invoke htons,Port
 mov [ebx].sin_port,ax
 assume ebx:nothing

 invoke bind, skt,\   ; Socket descriptor
   offset server,\  ; Address to bind to
   sizeof(sockaddr) ; Size of address

 cmp eax,SOCKET_ERROR
 je closesock

 invoke recvfrom,skt,\   ; Bound socket
   offset tmp,\  ; Receive buffer
   buffsz,\  ; Size of buffer in bytes
   0,\   ; Flags
   offset client,\  ; Buffer to receive client address
   offset sktaddrsz ; Length of client address buffer

 invoke sendto,skt,\   ; Bound socket
   offset servermsg,\ ; Receive buffer
   servermsgsz,\  ; Size of buffer in bytes
   0,\   ; Flags
   offset client,\  ; Buffer to receive client address
   offset sktaddrsz ; Length of client address buffer

 invoke TerminateThread,thread,0
 invoke MessageBoxA,0,offset tmp,offset capt,0

closesock:
 invoke closesocket,skt
noSock:
 invoke WSACleanup
 invoke ExitProcess,0

threadproc proc
invoke gethostname,offset servername,25
invoke MessageBoxA,0,offset servername,offset capt,0
invoke ExitProcess,0
threadproc endp
end _Start


Только я не въехал как его доработать чтобы он отвечал на входящие
соединения (в смысле посылал при получении данных свой текст на IP клиента)

Ответить

Номер ответа: 12
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 19.02.05 09:59
Приведенный тобой код - это UDP-сервер, он не устанавливает соединение, UDP-клиент и UDP-сервер обмениваются дейтаграммами. Для TCP-сервера последовательность примерно следующая:
1) Инициализируешь сокеты WSAStartup
2) Создаешь сокет socket
3) Привязываешь его к порту, который он будет слушать bind
4) Слушаешь на предмет входящих соединений listen
5) Принимаешь входящее соединение accept
6) Создаешь новый тред, передаешь в него хандл вновь созданного сокета
7) В треде пишешь/читаешь с этого хандла данные, генерируешь реакцию сервера
8) Закрываешь сокет close
9) Деинициализируешь сокеты WSACleanup

Ответить

Номер ответа: 13
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #13 Добавлено: 19.02.05 13:53
Я наверное совсем намеки пеерстал понимать :)
Короче, желаюя я написать серверок, чтобы, когда клиент к компьютеру
коннектился этот серверок ему отвечал.

Подконнектились клиентом к серверу
C: HELO
S: HELO
C: VER
S: 1.0
C: MSG Privet ' Выдалось сообщение
S: OK
Отключились
Сервер переходит к ожиданию нового коннекта

Ответить

Номер ответа: 14
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #14
Добавлено: 19.02.05 15:47
Ты плохо пытаешься заставить нас желать того же :) Если бы ты указал сумму, тогда, наверно, желающих стало бы больше, чем 1 :)

Ответить

Номер ответа: 15
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #15
Добавлено: 19.02.05 18:01
Да... Sharp прав. Если ты не умеешь кодить на АСМе, то нафига ваще писать на нем сервер???

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам