Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2012, 20:30   #11
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Сокет у тебя уже есть.
У тебя протокол не работает.
По запросу твоего клиента я уже писал:
Цитата:
Во вторых - запрос клиента должен заканчиваться пустой строкой.
Ты это не исправил. У тебя запрос не закончен.

По коду - ну у тебя нет выхода из цикла приёма. И вообще, принимать в MessageBox ~ 100 Кбайт - овую страничку пачками по 256 байт, это конечно на редкостного гурмана.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 09.07.2012, 20:48   #12
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
У тебя протокол не работает.
Что это значит? Запрос неправильный?
Цитата:
запрос клиента должен заканчиваться пустой строкой.
Всмысле 13,10?
Цитата:
По коду - ну у тебя нет выхода из цикла приёма
А разве при завершении чтения функция не возвращает -1? Я посмотрю в вашем коде, но могу не найти
Цитата:
это конечно на редкостного гурмана
А у вас buffer size вроде 256, хотя была еще какая-то переменная на тысячу или 10000

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 10.07.2012, 13:19   #13
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Что это значит? Запрос неправильный?
Да, он не закончен.
Цитата:
Всмысле 13,10?
Да
Цитата:
А разве при завершении чтения функция не возвращает -1?
При успешном завершении функция recv возвращает количество полученных байт.
Цитата:
А у вас buffer size вроде 256, хотя была еще какая-то переменная на тысячу или 10000
Ну я больше про сам вывод. Ожидается получить примерно стокилобайтную страничку, пакетами по 256 байт. Т.е. это примерно 400 Messagebox-ов, каждому из которых надо нажать OK. Кому как, а мне уже на четвёртом это надоело.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 14.07.2012, 12:57   #14
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Спасибо огромное за помощь. Клиент наконец-то сделал. Теперь руки дошли до сервера. Все нормально, по-моему, до вызова accept'а. Он возвращает -1.
Код:
include 'F:/FASM/INCLUDE/win32ax.inc'
.data
struc   SOCKADDR
{
        .sin_family      dw      0
        .sin_port        dw      0
        .sin_addr        dd      0
        .sin_zero        db      8 dup(0)
}
wsadata          WSADATA
host             db 'localhost',0
Hello            db 'Приветствие',0
socketaddr       SOCKADDR
PORT             equ 7254
brChar           db 0Dh,0Ah
bufstr           db 80    dup(0)
ReadBuf          db 256     dup(0)
stdout           dd 0
cWritten         dd 0
stdin            dd 0
sockhandle       dd 0
sockclient       dd 0
.code
start:
             invoke  AllocConsole
             invoke  GetStdHandle,STD_OUTPUT_HANDLE
             mov     [stdout],eax
             invoke  GetStdHandle,STD_INPUT_HANDLE
             mov     [stdin], eax

             invoke  WSAStartup,101h,wsadata
             cmp     eax,0
             jnz     ErrorSock

             invoke  socket, AF_INET,SOCK_STREAM,0
             cmp     eax,-1
             jz      ErrorSock
             mov     [sockhandle],eax

             mov     [socketaddr.sin_family],AF_INET

             invoke  gethostbyname,host
             cmp     eax,0
             jz      ErrorSock
             mov     eax,DWORD [eax+12]
             mov     eax,[eax]
             mov     eax,[eax]


             mov     [socketaddr.sin_addr],eax
             invoke  htons,PORT
             mov     [socketaddr.sin_port],ax

             ;áèíäèíã ñîêåòà ê ëîêàëüíîìó ïîðòó
             invoke  bind,[sockhandle],socketaddr,sizeof.sockaddr_in
             cmp     eax,0
             jnz     ErrorSock

             invoke  listen,[sockhandle],10
             cmp     eax,0
             jnz     ErrorSock

lp:          invoke  accept,[sockhandle],socketaddr,sizeof.sockaddr_in
             cmp     eax,-1
             jz      ErrorSock
             mov     [sockclient],eax

             invoke  lstrlen,Hello
             invoke  send,[sockclient],Hello,eax,0
             jmp     lp

             jmp     EndServ
ErrorSock:   stdcall WriteConsoleRus,Failed,4; извещение об ошибке
EndServ:     invoke  WSACleanup
             invoke  ReadConsole,[stdin],ReadBuf,256,cWritten,0
             invoke  ExitProcess,0
Код очищал от лишних извещений, мог ненароком что-нибудь удалить.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 17.07.2012, 22:32   #15
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

-Так серверу вроде зачем gethostbyname. Он же сам сервер.

-третий параметр функции accept - это адрес переменной, которая содержит размер структуры sockaddr_in, а не константа - это важная ошибка.

Вот вам примерчик консольного сервера-попугая:
Вложения
Тип файла: rar serverParrot.rar (3.2 Кб, 29 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 19.07.2012, 20:52   #16
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Благодарю за помощь.
Цитата:
Так серверу вроде зачем gethostbyname. Он же сам сервер.
Мне кажется - да. Когда я в структуру запихиваю localhost, через gethostbyname, его не видно из локальной сети, а если 192.168.1.2, то видно.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 04.08.2012, 12:18   #17
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Решил испытать сервер-клиент через интернет и выяснил, что он не работает, хотя через localhost функционирует.
Код:
proc    CreateSocketServer,port

        invoke  WSAStartup,101h,wsadata
        cmp     eax,0
        jnz     errorsock

        invoke  socket, AF_INET,SOCK_STREAM,0
        cmp     eax,-1
        jz      errorsock
        mov     [sockhandle],eax
        mov     [socketaddr.sin_family],AF_INET

      ;  mov     [ErrorMessage],LocHost
      ;  invoke  gethostbyname,[host]
      ;  cmp     eax,0
      ;  jz      errorsock
      ;  mov     eax,DWORD[eax+12]
      ;  mov     eax,[eax]
      ;  mov     eax,[eax]
       ; mov     [socketaddr.sin_addr],eax
        invoke  htons,[port]
        mov     [socketaddr.sin_port],ax

        invoke  bind,[sockhandle],socketaddr,sizeof.sockaddr_in
        cmp     eax,0
        jnz     errorsock

        invoke  listen,[sockhandle],10
        cmp     eax,0
        jnz     errorsock

        invoke  MessageBox,0,'Cервер начнет прослушивание клиентов','Сервер работает',0

lp:

        cmp     [sockactive],0
        jz      endcreate

        invoke  accept,[sockhandle],socketaddr,0
        cmp     eax,-1
        jz      errorsock

        invoke  CreateThread,0,0,SockClientThread,ebx,0,id
        jmp     lp
Как исправить? В чем проблема?

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 04.08.2012, 12:31   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

доступ то к компу из инета есть?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.08.2012, 13:14   #19
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Проверьте на какой адрес вы делаете bind.
waleri вне форума Ответить с цитированием
Старый 04.08.2012, 15:43   #20
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
доступ то к компу из инета есть?
Есть.
Цитата:
Проверьте на какой адрес вы делаете bind.
Ни на какой. Вы же видите, что я gethostbyname закомментировал. А какой адрес должен быть? Тот под которым я в интернете? А вот, например, есть такой компонент TServerSocket он не требует адреса. И в любые другие серверы не нужно вводить ip. Может они как-нибудь сами его находят?
--
Если у кто-то сможет попробовать у себя - отпишитесь. Добавил экзешники в аттач
Вложения
Тип файла: zip Sockets.zip (3.7 Кб, 10 просмотров)

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 04.08.2012 в 15:52.
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
winsock lama90 Помощь студентам 0 04.04.2012 00:17
WinSock Slame Работа с сетью в Delphi 5 22.03.2012 10:40
Передача параметров asm-asm Maksimall89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 22.12.2011 11:54
ASM и WinSock Wardrag Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 15 16.08.2010 14:17
WinSock Killbrum Win Api 1 18.10.2009 15:15