Показать сообщение отдельно

  #2  
Старый 10.08.2007, 18:40
NetMan
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме:
1089794

Репутация: 134
Post

Итак...
Код:
invoke WSAAsyncSelect, hSocket2, hWnd,WM_SOCKET, FD_ACCEPT+FD_READ
А FD_CLOSE кто будет обрабатывать?

Вот где сама проблема:
Код:
FD_ACCEPT:...
                                 invoke accept,hSocket2,0,0
                                 mov hClient,eax
Не хватает после этого добавить:
Код:
invoke WSAAsyncSelect, eax, hWnd,WM_SOCKET, FD_ACCEPT+FD_READ+FD_CLOSE
для обработки событий от клиентского сокета.

Ещё здесь исправить:
Код:
FD_READ:...
                                invoke recv, hClient, addr BytRecu, 1024,0
                                .....
                                invoke lstrlen, addr BytRecu
                                .....
Зачем получать количество полученных байт через lstrlen, если после вызова функции recv, количество полученных байт будет в eax? Но это не главное... Проблема в дескрипторе сокета, из которого ты пытаешься читать. Надо читать не из hClient, т.к. дескриптор сокета хранится в wParam (передаётся с сообщением WM_SOCKET).
Вот так правильно:
Код:
invoke recv, wParam, addr BytRecu, 1024,0
С FD_CLOSE тоже самое... Надо так:
Код:
invoke closesocket, wParam
P.S. Тебе надо ещё доделать сам чат.
P.P.S. Полезная ссылка по теме
 
Ответить с цитированием