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

Вниз

отправка строки через сокеты в цикле   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.043 c
15-1194023702
Kerk
2007-11-02 20:15
2007.12.02
Вопрос о русском языке


2-1194362965
Новичок
2007-11-06 18:29
2007.12.02
Передача данных из Парадокса в Интербейз


8-1170431716
Jimmy
2007-02-02 18:55
2007.12.02
Не работает пунктир для толстых линий.


2-1194345939
mrFreeman2007
2007-11-06 13:45
2007.12.02
ID3-тэги mp3-файлов


15-1193855856
Silver...
2007-10-31 21:37
2007.12.02
Сканер Штрих кода





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