Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Посмотрите и поправте хто умеет (https://forum.antichat.xyz/showthread.php?t=46385)

Dimi4 09.08.2007 12:15

Посмотрите и поправте хто умеет
 
Так как я с Украины прога на украинском.
Прога чат.
http://slil.ru/24717952
сдесь исходники
Так вот у меня проблема.
Когда человек коннект к другому то писать он может
А второй нет(выдает ошибку)
Прога на асме
Поправте плз.. кто может
Ошибка скорее всего в "connect.asm"(а где ей исчо быть?)
Надеюсь на ачат
----------------------
одна голова хорошо - а ачат лучше

NetMan 10.08.2007 18:40

Итак...
Код:

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. Полезная ссылка по теме


Время: 02:19