Форум: "Сети";
Текущий архив: 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