Посмотрите и поправте хто умеет

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Dimi4, 9 Aug 2007.

  1. Dimi4

    Dimi4 Чайный пакетик

    Joined:
    19 Mar 2007
    Messages:
    750
    Likes Received:
    1,045
    Reputations:
    291
    Так как я с Украины прога на украинском.
    Прога чат.
    http://slil.ru/24717952
    сдесь исходники
    Так вот у меня проблема.
    Когда человек коннект к другому то писать он может
    А второй нет(выдает ошибку)
    Прога на асме
    Поправте плз.. кто может
    Ошибка скорее всего в "connect.asm"(а где ей исчо быть?)
    Надеюсь на ачат
    ----------------------
    одна голова хорошо - а ачат лучше
     
    1 person likes this.
  2. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Итак...
    Code:
    invoke WSAAsyncSelect, hSocket2, hWnd,WM_SOCKET, FD_ACCEPT+FD_READ
    А FD_CLOSE кто будет обрабатывать? ;)

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

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