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

Вниз

Спрошу еще раз... Про TServerSocket   Найти похожие ветки 

 
NorthMan ©   (2004-04-23 13:43) [0]

На этот раз короче. Вопрос такой: сервер, неблок.сокет.
К серверу подключены несколько клиентов.

В методе ServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
пишу
begin
 s:=Socket.ReceiveText;
 ActThrd:= TActThrd.Create(s);
end;

Таким образом пытаюсь переложить основную нагрузку из основного на дополнительный поток. Но основное окно всеравно подвисает.
Может нужно иначе делать?


 
Iraizor ©   (2004-04-23 13:50) [1]

а зачем это тебе ? у тебя что , идут такие ресурсожручие процессы во время работы с сокетами ?


 
Digitman ©   (2004-04-23 13:51) [2]


> Может нужно иначе делать?


разумеется - иначе ! не изобретать велосипед непонятно по какой причине, а воспользоваться штатным режимом stThreadBlocking - там управление потоками "вылизано" до последней пылинки

что ты выиграл, стартуя трэд "ручками" ?


 
NorthMan ©   (2004-04-23 14:09) [3]

Видимо, я не совсем представляю работу сокетов в режиме stThreadBlocking. Как я понял, в этом режиме для каждого клиента создается свой поток и в нем идет вся работа?


 
Digitman ©   (2004-04-23 14:57) [4]


> в этом режиме для каждого клиента создается свой поток и
> в нем идет вся работа?


да


 
NorthMan ©   (2004-04-23 15:10) [5]

Еще вопрос: если я передаю строку длиной 50 байт, на сервере использую метод Read(buf, n), где n-длина буфера. Пусть n=10. На что это влияет?

   while (not Terminated) and ClientSocket.Connected do
   begin
     if MySocket.WaitForData(2000) then
       begin
         MySocket.Read(Buffer, 10);
         
       end;
   end;


 
Digitman ©   (2004-04-23 15:26) [6]


> На что это влияет?


ни на что абсолютно

если из посланных 50 байт на момент Read() доступны все 50 байт, то при n = 10 ты прочитаешь ровно 10 байт, оставшиеся 40 байт никуда не денутся - ты их сможешь прочитать при следующем Read()

если из посланных 50 байт на момент Read() доступны всего 5 байт, то при n = 10 ты прочитаешь ровно 5 байт, оставшиеся 45 еще не "доехали" , жди их циклическим вызовом Read() и рано или поздно сможешь их получить, если ничто не случится с трансп.каналом


 
NorthMan ©   (2004-04-23 15:41) [7]

т.е. в приведенном коде все 50 байт будут прочитаны, это просто вопрос времени и никаких дополнительных циклов на Read не надо?


 
Digitman ©   (2004-04-23 16:07) [8]


> т.е. в приведенном коде все 50 байт будут прочитаны


вовсе не обязательно

будет прочитано ровно столько байт, сколько доступны на принимающей стороне на момент успешного возврата из WaitFor()

WaitFor() извещает лишь о том, что доступны и не прочитаны тобой некие данные, о факт.размере которых можно судить только после попытки их прочтения


 
NorthMan ©   (2004-04-23 16:17) [9]

ага, т.е. чтобы принять все 50 байт нужно будет при каждом приеме проверять, все ли 50 байт приняты?


 
Digitman ©   (2004-04-23 17:08) [10]


> NorthMan ©   (23.04.04 16:17) [9]


а как ты хотел иначе ?

сеть (тем паче глобальная) - штука сложная, пока по ее "неведомым дорожкам" доберутся ожидаемые 50 байт. придется таки "помучиться" - на каждом "повороте" каждый байт из состава 50-ти ждет куча приключений ...


 
Глеб ©   (2004-05-31 10:50) [11]

Даёшь TESTER!!!!!

А ещё SS Chat (created by iraizor)



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

Форум: "Сети";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.047 c
1-1089606581
sergeyyy71
2004-07-12 08:29
2004.07.25
Delphi IDE и много пользователей ОС


4-1086352171
RagE
2004-06-04 16:29
2004.07.25
Помогите разобраться с хуками


3-1088765847
Nikolai_S
2004-07-02 14:57
2004.07.25
Как записать в поле binary файл и потом считать его обратно?


4-1086554567
DjOne
2004-06-07 00:42
2004.07.25
HookMenu


14-1088540954
Marser
2004-06-30 00:29
2004.07.25
Винница!!! Земляки, отзовитесь!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский