Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Рдновременный прием TServerSocket ом файлов от нескольких клиенто   Найти похожие ветки 

 
Lord_of_Darkness ©   (2005-10-18 01:23) [0]

Здравствуйте.
Собсно сабж. Есть сервак, на который несколько клиентов должны отсылать файлы, причем возможно, что одновременно. Так вот, я видел пример, где файл отправляется как  TMemoryStream через SendStream, а при приеме через ReceiveBuf куски склеиваются. Но этот пример был для случая - сервер отправляет, клиент принимает, а у меня противоположный случай. Кстати может в каждый пакет добавлять IP клиента, чтобы сервак знал кусок чьего файла он сейчас принял. Только как это сделать? И вообще, что посоветуете по этому поводу.


 
Lord_of_Darkness ©   (2005-10-18 01:28) [1]

ЗЫ прошу извинить меня за две темы, это произошло случайно, из-за глюка со входом в конференцию, а удалить второй я не могу.


 
beglec ©   (2005-10-18 02:56) [2]

1. Насколько мне известно IP каждого пакета всегда известен. Поэтому прошиваеть его не надо. IP:=Socket.RemoteAddress;
2. И у сервера и у клиента есть методы SendStream но лично я ими не пользуюсь :)
3. при пакетах (даже в самой скоростной сети) свыше 64к сталкнешся с проблей разрыва пакета. А по интернету и подавно. В данном случае нужно обрабатывать событие 0nWrite но как это сделать я не знаю. Я вышел из положения следующим образом, просто любой поток разбивают по 1 кб. и отправляю. Следующий пакет не отправляется пока не получено подтверждение о получении пакета.

в какую сторону ты отправляешь разницы нет. Или Клиент-Сервер или Сервер Клиент


 
atruhin ©   (2005-10-18 09:18) [3]

>> Но этот пример был для случая - сервер отправляет, клиент принимает,
Разберись с данным примером. Разницы кто отправляет, а кто принимает нет.
Файлы у тебя не перепутаются, т.к. на чтение от каждого клиента вызывается событие OnRead где первый параметр - сокт конкретного клиента. Один из вариантов: в событии OnClientConnect создаешь нужную тебе структуру данных и указатель присваеваешь TClientSocket(Socket).Tag при получении данных у тебя будет указатель на твою структуру.


 
Slym ©   (2005-10-18 09:29) [4]

Совет: переходи на ThreadBlocking... проблема отпадет...
т.к. в этом режиме каждое соединение использует отдельный поток, и путаницы "что, от кого" в нутри одного единственного потока нет.


 
Volf_555   (2005-11-10 18:39) [5]

А где ThreadBlocking откопать? На вкладках не нашёл
P.S.: я не Lord_of_Darkness


 
Digitman ©   (2005-11-11 10:15) [6]


> Volf_555   (10.11.05 18:39) [5]


ThreadBlocking - это режим работы TServerSocket, в котором транспорт для каждого из активных клиентов сервера организован в отдельном кодовом потоке с использованием синхронного блокирующего режима транспортного гнезда

режим этот  задается установкой св-ва TServerSocket.ServerType = sThreadBlocking перед активизацией сервера

по умолчанию TServerSocket.ServerType = stNonBlocking



Страницы: 1 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.08 c
15-1138536700
Pazitron_Brain
2006-01-29 15:11
2006.02.19
Какой самый легкий для изучения


2-1138892839
dera
2006-02-02 18:07
2006.02.19
Как в символьном поле с помощь Local SQL найти значение *ВАН*?


15-1138453656
PARUS
2006-01-28 16:07
2006.02.19
Компоненты Delphi (2005).


2-1138686739
Bratskiy
2006-01-31 08:52
2006.02.19
создание Wizard а


1-1137654092
_white_
2006-01-19 10:01
2006.02.19
Как найти в другой программе нужный компонент