Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
26 Апрель 2024, 08:05:33
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование
(Модераторы: Админ, barmalei) > Тема:

Почему сливаются строки в сокетах?

Страниц  :   Вниз
  Печать  
Автор Тема: Почему сливаются строки в сокетах?  (Прочитано 1290 раз)
0 Пользователей и 1 Гость смотрят эту тему.
alex-v
Настоящий гродненец
****

Репутация: +11/-0
Offline Offline

Пол: Мужской
Сообщений: 320

Просмотр профиля
« : 25 Сентябрь 2008, 16:00:03 »

Если из клиента послать серверу три строки вподряд:

ClientSocket1->Socket->SendText("line_0");
 ClientSocket1->Socket->SendText("line_1");
 ClientSocket1->Socket->SendText("line_2");


то они на сервере почему-то сливаются в одну строку, если их получить так:

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
 Memo1->Lines->Add(Socket->ReceiveText());
}


сливаются так:

line_0line_1line_2

Как сделать чтобы строки эти не сливались на сервере?
Записан
VooDoo
Почетный гродненец
*****

Репутация: +89/-1
Offline Offline

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #1 : 25 Сентябрь 2008, 16:05:07 »

ClientSocket1->Socket->SendText("line_0\n");
ClientSocket1->Socket->SendText("line_1\n");
 ClientSocket1->Socket->SendText("line_2\n");
попробуй так
может не \n, фиг его знает как там в делфях
Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
alex-v
Настоящий гродненец
****

Репутация: +11/-0
Offline Offline

Пол: Мужской
Сообщений: 320

Просмотр профиля
« Ответ #2 : 25 Сентябрь 2008, 16:34:49 »

VooDoo, не пойдет. Всеравно эти три строки на сервере сливаются в одну Socket->ReceiveText().
А мне надо чтобы на сервере три раза вызывалось событие ServerSocket1ClientRead, а не один раз.
Записан
VooDoo
Почетный гродненец
*****

Репутация: +89/-1
Offline Offline

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #3 : 25 Сентябрь 2008, 17:20:54 »

try this one
Код:
ClientSocket1->Socket->SendText('line_0'+#13#10);

у тебя в любом случае не будет 3х ивентов. Хочешь 3х ивентов 3 раза открывай и закрывай сокет.

Я так думаю, если конечно же Delphi делали не наркоманы.
Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
Mack
Гродненец
**

Репутация: +5/-0
Offline Offline

Сообщений: 111


Я люблю этот Форум!

Просмотр профиля Email
« Ответ #4 : 25 Сентябрь 2008, 18:11:29 »

вполне ожидаемое поведение, три подряд вызова
ClientSocket1->Socket->SendText("line_0");
 ClientSocket1->Socket->SendText("line_1");
 ClientSocket1->Socket->SendText("line_2");
идентичны одному ClientSocket1->Socket->SendText("line_0line_1line_2");
Замечу что данные могут не только объединяться в один блок но и разбиваться на несколько, все зависит от объема данных, сети,  и т.п.

P.S. стандартное поведение сокетов
Записан
alex-v
Настоящий гродненец
****

Репутация: +11/-0
Offline Offline

Пол: Мужской
Сообщений: 320

Просмотр профиля
« Ответ #5 : 25 Сентябрь 2008, 19:19:30 »

Решил использовать разделитель в конце строки "
".

Всем спасибо.
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2024, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,099 секунд. Запросов: 19.