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

Вниз

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

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

Наверх





Память: 0.46 MB
Время: 0.186 c
14-1118208485
Cosinus
2005-06-08 09:28
2005.07.11
Подскажите, как освободить виртуальную память


14-1118811507
Ega23
2005-06-15 08:58
2005.07.11
С днём рождения! 15 июня


14-1118649847
WondeRu
2005-06-13 12:04
2005.07.11
В чем смысл жизни?


6-1112793722
Alexander Panov
2005-04-06 17:22
2005.07.11
Получение кода ошибки в Indy.


14-1118758906
Soft
2005-06-14 18:21
2005.07.11
Как вам оформление и техническое решение?





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