60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
|
||||||
1 | ||||||
TServerSocket прием большого буфера от клиента. Как лучше реализовать?08.03.2015, 01:02. Показов 619. Ответов 0
Метки нет (Все метки)
Не знаю, как в названии темы описать свой вопрос.
Клиент сделан на обычных сокетах (winsock2.h), тогда как сервер сделан в RAD Studio с соответствующими компонентами, которые несколько отличаются от шиндосувской библиотеки. А теперь вопрос: как на многопользовательском сервере организовать нормальную передачу данных (файлов и тд)? Чтобы остальные сокеты, например, в событии OnRead не перекрывались, как здесь. Там весь процесс передачи сделан на булевой переменной, которая перенаправляет принимаемые данные в TMemoryStream, а это не годится для моего сервера. Ведь во время передачи данных другой клиент может присоединиться к серверу, и его первичная информация (некоторые данные о компе) пойдут в файл. В общем, у меня уже немножко крыша едет. Хочу организовать это хорошо, чтоб без всяких сбоев и поэтому прошу помощи здесь. Была идея сокет вынести в отдельный поток, где его буду обрабатывать. Но как без события OnRead принимать данные? Функция ReceiveText() вернет текст сразу (пустую строку ) а я ее, как дурак, буду пытаться парсить на размер файла и тд. Хотелось написать покороче, а получилось как всегда. Не пинайте, уж очень много мыслей. Добавлено через 1 минуту И да, перешлет ли большие данные обычная функция send? Т.е. она сработает так же, как и SendBuf в XE* компонентах? Просто вызов - и ждешь пока клиент все сплавит серверу? Добавлено через 5 минут Есть идея конечно это все дело так же в событии обрабатывать, проверяя например входящий сокет на схожесть с сокетом, через который мы сейчас передаем данные (типа записать его куда-нибудь). Добавлено через 3 часа 17 минут Я не понимаю.
Это такие особенности билдера? Насколько мне известно, функция recv завершается при получении хотя бы одного байта от сокета и возвращает это количество байт, а тут хрень полная... Добавлено через 4 минуты Под структуру (Structure) я закидываю TCustomWinSocket->SocketHandle, по идее это и нужно присваивать типу SOCKET. Но все равно recv возвращает -1 А это, как я понял, возвращается только при потере связи. Короче, беда какая-то.
0
|
08.03.2015, 01:02 | |
Ответы с готовыми решениями:
0
Как лучше реализовать прием без запроса Mnea с GPS модуля Как лучше реализовать подключение второго клиента к первому? Как лучше читать из буфера void*? Отправка и прием буфера SendBuf |
08.03.2015, 01:02 | |
08.03.2015, 01:02 | |
Помогаю со студенческими работами здесь
1
Как реализовать прием писем Создание бесконечно большого буфера Передача большого буфера даных c# .NET 2.0 Как реализовать приём почты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |