Показать сообщение отдельно
  #15  
Старый 11.02.2013, 21:45
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию

Вот обработчик сообщений в проге.

Код:
procedure TServerThread.WM_NetMsg(var M: TMessage);
Var
    ClientSocket: TSOCKET;
    iRet: Integer;
    sRecvBuff: Array [0..1023] Of Byte;
    sSendString, CH: String;
    I: Integer;
begin
    case M.LParam Of
    // Прибыл запрос на соединение
    FD_ACCEPT:
      Begin
         MessageBox(0,'Ошибка получения данных.','Внимание !!!',0);
        ClientSocket := Accept(M.WParam,nil, nil);
        WSAAsyncSelect(ClientSocket, Handle, WM_USER+1,
                                  FD_READ {or FD_WRITE} or FD_CLOSE);
      End;
    // Прибыли данные
    FD_READ:
      Begin
        iRet := recv(M.WParam, sRecvBuff,SizeOf(sRecvBuff),0);
        if (iRet = SOCKET_ERROR) then
          Begin
           MessageBox(0,'Ошибка получения данных.','Внимание !!!',0);
           Exit;
          End;
          for i := 0 to iRet-1 do sSendString := sSendString + chr(sRecvBuff[i]);
          if sSendString[LenGth(sSendString)] = chr($10) then
          sSendString:= Copy(sSendString,1,LenGth(sSendString)-2);
          if sSendString <> 'get' then Exit;
          sSendString := 'Command Get - OK';
          for I := 1 to LenGth(sSendString) do
              Begin
                CH := sSendString[i];
                sREcvBuff[i-1] := Byte(CH[1]);
              End;
          iRet := send(M.WParam, sRecvBuff, LenGth(sSendString),0);
          if (iRet = SOCKET_ERROR) then
            Begin
              MessageBox(0,'Ошибка передачи данных.','Внимание !!!',0);
              Exit;
            End;
      End;
      // Сокет закрыт
      FD_CLOSE:
        Begin
          CloseSocket(M.WParam);
        End;
    end;
end;
Цитата:
Сообщение от Bargest
Эм. А где связь? Неблокирующий режим назначается сокету. Я сам делал неблокирующие сервера без визуалок. ioctlsocket, select. И все дела.

Приведи пример как делал. Потому что я нашел только такое использование. Там сама винда, якобы, через Message, начинает слать в прогу события произошедшие на сокете.
Ответить с цитированием