11.02.2013, 21:45
|
|
Новичок
|
|
Регистрация: 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, начинает слать в прогу события произошедшие на сокете.
|