Чтение онлайн

на главную - закладки

Жанры

О чём не пишут в книгах по Delphi

Григорьев Антон Борисович

Шрифт:

 if Connection.BytesLeft < 0 then

 begin

ServerForm.AddMessageToLog('Клиент ' + Connection.ClientAddr +

' - внутренняя ошибка программы: получено больше байтов, ' +

'чем ожидалось');

ServerForm.RemoveConnection(Connection);

 end

 else if Connection.BytesLeft = 0 then

 begin

//
Строка получена целиком. Выводим ее на экран.

ServerForm.AddMessageToLog('От клиента ' + Connection.ClientAddr +

' получена строка: ' + Connection.Msg);

// Формируем ответ

Connection.Msg :=

AnsiUpperCase(StringReplace(Connection.Msg, #0,

'#0', [rfReplaceAll])) + ' (Overlapped server)'#0;

// Смещение - ноль, осталось отправить полную длину

Connection.Offset := 0;

Connection.BytesLeft := Length(Connection.Msg);

// Формируем буфер из строки Connection.Msg

Buf.Len := Connection.BytesLeft;

Buf.Buf := Point(Connection.Msg);

// Отправляем строку

if WSASend(Connection.ClientSocket, @Buf, 1, NumBytes, 0,

@Connection.Overlapped, SendMsgCompleted) = SOCKET_ERROR then

begin

it WSAGetLastError <> WSA_IO_PENDING then

begin

ServerForm.AddMessageToLog('Клиент ' + Connection.ClientAddr +

' - ошибка при отправке строки: ' + GetErrorString);

ServerForm.RemoveConnection(Connection);

end;

end;

 end

 else

 begin

// Connection.BytesLeft < 0 - строка прочитана частично

Inc(Connection.Offset, cdTransferred);

// Формируем буфер из непрочитанного остатка строки

Buf.Len := Connection.BytesLeft;

Buf.Buf := PChar(Connection.Msg) + Connection.Offset;

// Читаем остаток строки

Flags := 0;

if WSARecv(Connection.ClientSocket, @Buf, 1, NumBytes, Flags,

@Connection.Overlapped, ReadMsgCompleted) = SOCKET_ERROR then

begin

if WSAGetLastError <> WSA_IO_PENDING then

begin

ServerForm.AddMessageToLog('Клиент ' + Connection.ClientAddr +

' -
ошибка при чтении строки: ' + GetErrorString);

ServerForm.RemoveConnection(Connection);

end;

end;

 end;

end;

// Функция SendMsgCompleted используется в качестве функции завершения

// для перекрытой отправки строки.

// Во многом она аналогична функции ReadLenCompleted

procedure SendMsgCompleted(dwError: DWORD; cdTransferred: DWORD; lpOverlapped: PWSAOverlapped; dwFlags: DWORD); stdcall;

var

 Connection: PConnection;

 Buf: TWSABuf;

 NumBytes, Flags: DWORD;

begin

 Connection := ServerForm.GetConnectionByOverlapped(lpOverlapped);

 if Connection = nil then

 begin

ServerForm.AddMessageToLog(

'Внутренняя ошибка программы - не найдено соединение');

Exit;

 end;

 if dwError <> 0 then

 begin

ServerForm.AddMessageToLog('Клиент ' + Connection.ClientAddr +

' - ошибка при отправке строки: ' + GetErrorString(dwError));

ServerForm.RemoveConnection(Connection);

Exit;

 end;

 Dec(Connection.BytesLeft, cdTransferred);

 if Connection.BytesLeft < 0 then

 begin

ServerForm.AddMessageToLog('Клиент ' + Connection.ClientAddr +

' — внутренняя ошибка программы: отправлено больше байтов, ' +

'чем ожидалось');

ServerForm.RemoveConnection(Connection);

 end

 else if Connection.BytesLeft = 0 then

 begin

// Строка отправлена целиком. Выводим сообщение об этом.

ServerForm.AddMessageToLog('Клиенту ' + Connection.ClientAddr +

' отправлена строка: ' + Connection.Msg);

// Очищаем строку, чтобы зря не занимала память

Connection.Msg := '';

// Теперь будем снова читать длину строки

Connection.Offset := 0;

Поделиться:
Популярные книги

Измена. Испорченная свадьба

Данич Дина
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Измена. Испорченная свадьба

Последний из рода Демидовых

Ветров Борис
Фантастика:
детективная фантастика
попаданцы
аниме
5.00
рейтинг книги
Последний из рода Демидовых

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Измена. Право на семью

Арская Арина
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Измена. Право на семью

Неудержимый. Книга XIX

Боярский Андрей
19. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIX

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи

Род Корневых будет жить!

Кун Антон
1. Тайны рода
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Род Корневых будет жить!

Брак по-драконьи

Ардова Алиса
Фантастика:
фэнтези
8.60
рейтинг книги
Брак по-драконьи

Боги, пиво и дурак. Том 3

Горина Юлия Николаевна
3. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 3

Отморозок 3

Поповский Андрей Владимирович
3. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 3

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3