Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Рдновременный прием 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
15-1138275515
DesWind
2006-01-26 14:38
2006.02.19
Проблема с перепрошивкой BIOS


2-1138526331
начинающий5
2006-01-29 12:18
2006.02.19
RXLib


1-1137730928
ZilonAtakuit
2006-01-20 07:22
2006.02.19
Создание таймера


6-1131478836
Bruce
2005-11-08 22:40
2006.02.19
Задержка при отправке данных. Indy.


1-1137740085
GangsterMan
2006-01-20 09:54
2006.02.19
Отсутствует реакция на ХотКей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский