Текущий архив: 2007.12.02;
Скачать: CL | DM;
Вниз
отправка строки через сокеты в цикле Найти похожие ветки
← →
max_max (2007-03-29 12:54) [0]Добрый день!
Пишу клиент-серверное приложение.
Есть цикл:
for i:=0 to 10 do ServerSocket1.Socket.Connections[0].SendText(StringList1.Strings[i]);
Посдкажите, пожалуйста, почему строки (Strings[i]) отправляются одним потоком а не разными, тоесть каждая строка при каждом повторе цикла.
← →
Сергей М. © (2007-03-29 12:58) [1]Потому что TCP - поточный протокол.
← →
max_max (2007-03-29 13:01) [2]
> Потому что TCP - поточный протокол.
Дело в том, что если сделать так:
for i:=0 to 10 do
begin
ServerSocket1.Socket.Connections[0].SendText(StringList1.Strings[i]);
sleep(100);
end;
то все будет Ок, только производительность упадет. Может есть какой-то другой выход?
← →
Сергей М. © (2007-03-29 13:06) [3]
> Может есть какой-то другой выход?
Перед каждой посылаемой строкой посылать ее длину.
Соответственно на принимающей стороне для каждой ожидаемой строки принимать сначала длину, и только затем собственно строку заранее уже известной длины.
← →
Rouse_ © (2007-03-29 13:07) [4]Другой подход состоит в отключении алгоритма Нэгла флагом TCP_NODELAY, но это тоже может привести к уменьшению производительности из-за возросшего кол-ва пакетов в сети.
← →
Сергей М. © (2007-03-29 13:17) [5]
> Rouse_ © (29.03.07 13:07) [4]
> Другой подход состоит в отключении алгоритма Нэгла
От этого же "поточность" ТСР никак не изменится )
← →
max_max (2007-03-29 13:19) [6]
> Перед каждой посылаемой строкой посылать ее длину.Соответственно
> на принимающей стороне для каждой ожидаемой строки принимать
> сначала длину, и только затем собственно строку заранее
> уже известной длины.
Имеется ввиду:
for i:=0 to 10 do
begin
ServerSocket1.Socket.Connections[0].SendText(
IntToStr(Length(StringList1.Strings[i]));
ServerSocket1.Socket.Connections[0].SendText(StringList1.Strings[i]);
end;
Если да, то предположим есть список:
первая строка
вторая строка
...
В этом случае клиент примет строку: 13первая строка13вторая строка, тоесть прийдется писать отдельную функцию для разбора этой строки. Это конечно не сложно, но а если количество символов и строка отправятся в отдельных потоках? Возможно ли это?
← →
Сергей М. © (2007-03-29 14:14) [7]
> Это конечно не сложно
Ну раз не сложно, то дерзай ! Какие проблемы-то ?
> сли количество символов и строка отправятся в отдельных
> потоках?
Какие нафих "потоки". Ты под SuperOS передаешь чего-то там при посредничестве TCP, я под PuperOS принимаю это самое "чего-то там" при посредничестве того же самого TCP, и мы знать не знаем о каких-то там "потоках" друг у друга, тем не менее ты успешно передал, а я успешно принял.
Дальше шевели репой сам).. То бишь - делай выводы)
Страницы: 1 вся ветка
Текущий архив: 2007.12.02;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.031 c