Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Сообщение через сокет передается не полностью   Найти похожие ветки 

 
_Alexander_   (2005-04-07 14:19) [0]

Всем привет!
Серверную часть пишу на Делфи. Общий смысл: в потоке создается экземпляр TServerSocket, коннектится к клиенту и отсылает ему данные. В качестве клиента КПК, программа для него написана на C# под VisualStudio.
Когда в качестве тестового сервера была програмулина на C#, общались они нормально. Когда отправляются сообщения из под Делфи, например, так:
 Socket.SendText("MyText1");
 Socket.SendText("MyText2");
Клиент получает одно сообщение, без первого символа и обрезанное:
 yText1MyText2
Это я победил- добавил #9
 Socket.SendText("#MyText1");
Теперь каждое сообщение приходит отдельно, но по-прежнему не полностью... Что бы это могло быть?


 
Digitman ©   (2005-04-07 14:30) [1]

а где написано, что каждая отдельной строке, посланной методом SendText() на стороне передатчика, должно соответствовать отдельное событие OnRead на стороне приемника ?


 
_Alexander_   (2005-04-07 14:43) [2]

Если сообщения отсылаются сервером написанным на C#, сообщения принимаются каждое отдельно. Отсюда можно сделать вывод, что дело не в отработке приемником событий а то ли в передатчике то ли в формате передаваемых строк


 
Digitman ©   (2005-04-07 14:47) [3]


> _Alexander_   (07.04.05 14:43) [2]


ты на вопрос не ответил ...


 
_Alexander_   (2005-04-07 14:57) [4]

Какой вопрос? "Где написано...?" Не владею такой информацией.
Исходя из уточняющего вопроса получается, что если сообщения остылаются одно за другим, то на приемнике это уже одно сообщение?


 
_Alexander_   (2005-04-07 15:12) [5]

Точнее, судя по тому что я вижу, строки сообщений могут быть соединены или разованы произвольным образом... Подскажите плз. как этого избежать.


 
atruhin ©   (2005-04-07 15:15) [6]

Подскажите плз. как этого избежать.
Никак. Ты используешь потоковое содинение. В начале строки передавай ее длинну


 
_Alexander_   (2005-04-07 15:20) [7]

Вобще говоря получается что и длина строки может передаться несколькими сообщениями :)
Можна конечно ввести свой признак конца строки...


 
atruhin ©   (2005-04-07 15:32) [8]

>>Вобще говоря получается что и длина строки может передаться >>несколькими сообщениями :)
А вот ирония в конце зря. Конечно может.
После установки соединения начинаеш прием данных. Предположим первые 4 байта длинна. Когда считал 4 байта из сокета запоминаешь длинну и читаешь контент. Как дочитал следующие 4 байта опять длинна и т.д.


 
Digitman ©   (2005-04-07 15:50) [9]


> Вобще говоря получается что и длина строки может передаться
> несколькими сообщениями


нет там никаких "сообщений" .. ТСР - это stream-oriented протокол, а не message-oriented (UDP)

сколько доступно на принимающей стороне - тем и довольствуйся

ожидал 10 байт, апрочитал за раз половину ? жди оставшиеся 5 байт ..

ожидал 10 байт, а прочитал за раз больше ? обрабатывай свои ожидаемые и уже полученные 10 байт, остальные относятся к следующему "сообщению" передатчика - буферизуй их и жди очередного фрагмента вх.потока


 
Verg ©   (2005-04-09 07:01) [10]


> Digitman ©   (07.04.05 15:50) [9]


Пора бы это в лейт-вывеску на входе в форум "сети" повесить...



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

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
3-1115284835
denis24
2005-05-05 13:20
2005.07.11
Непростая раскраска DBgrid


3-1117530841
ryds
2005-05-31 13:14
2005.07.11
как программно запустить диалоговое окно IBDatabase Editor?


14-1118144204
Xmen
2005-06-07 15:36
2005.07.11
Программа в СистемТрей


4-1115870523
ORMADA
2005-05-12 08:02
2005.07.11
Созадать иконку (ico) на WinApi


1-1118521788
leonidus
2005-06-12 00:29
2005.07.11
Программа не дает выключить комп