В последнее время я получил уже несколько однотипных жалоб со стороны знакомых разработчиков, заключающиеся в том, что в инете нормальных примеров по сетям, реализованных на Sockets API, почти не найти, а то что есть, то это в основном простенькие, сделанные на тяп-ляп при помощи компонентов, UDP чаты и не более того( конечно мой чатик к этому не относится :] )
Поэтому я уделил время новой статейке из серии сетевого программирования, в которой решил описать структуру пусть даже и простого эхо-сервера, но зато уже с ориентацией на учёт и обработку подключений. Поэтому думаю что многие заметят в этом полезное деяние)
В данной статье будет рассмотрена разработка сервера и клиента на протоколе UDP средствами стандартных сокетов(сокеты Беркли) в блокирующем режиме.
Для определения готовности сокетов будет использоваться функция select().
Логически предшествующие статьи:
Введение в протокол UDP и пример с исходниками простого чата.
Поэтому я уделил время новой статейке из серии сетевого программирования, в которой решил описать структуру пусть даже и простого эхо-сервера, но зато уже с ориентацией на учёт и обработку подключений. Поэтому думаю что многие заметят в этом полезное деяние)
В данной статье будет рассмотрена разработка сервера и клиента на протоколе UDP средствами стандартных сокетов(сокеты Беркли) в блокирующем режиме.
Для определения готовности сокетов будет использоваться функция select().
Логически предшествующие статьи:
Введение в протокол UDP и пример с исходниками простого чата.
на счёт того, что надо конвертировать record в массив байт - фигня. я конвертирую через Move только данные структуры пакета, но сам пакет передаю напрямую в SendTo
ОтветитьУдалитьTPacket = record
CMD : Word;
Buffer : TDataBuffer; // массив байт
end;
сам такой пакет я отправляю, а данные других переменных и структур заношу через Move в Buffer
Ну и молодцом) Только получается у тебя то же самое о чём я и сказал, просто массив, который у меня в примере называется arr и помещается в буфер сокета, ты назвал в своём примере Buffer и поместил его в рекорд, который помещаеш в буфер сокета.
Удалитья хотел сказать, что необязательно приводить в массив байт переменные. можно хоть record напрямую передавать в SendTo, RecvFrom
Удалитьда, конечно. теперь я понял, что у меня чрезмерно утвердительно было написано про конвертацию в массив. подрпавил этот абзац.
УдалитьГрубо говоря, функции send() и sendto() - это как move(), которая копирует данные в буфер сокета.