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

Вниз

Разделение данных на пакеты   Найти похожие ветки 

 
amg ©   (2002-03-07 04:00) [0]

В таком варианте, образуется один пакет.
ServerSocket1.Socket.Connections[0].SendBuf(vBuffer^, vI2);
ServerSocket1.Socket.Connections[0].SendBuf(vBuffer^, vI2);
Как можно сделать, чтобы эти данные были в разных пакетах?


 
panov ©   (2002-03-07 08:15) [1]

Никак, только обрабатывать такую ситуацию самому, вставляя в передаваемые данные, например, свои разделители.

Это свойство TCP/IP протокола.


 
Digitman ©   (2002-03-07 09:44) [2]

TServerSocket использует поточный режим работы гнезд (SOCK_STREAM), поэтому ни каких "пакетах" не может быть речи. Задача логического разделения данных в непрерывном потоке на отдельные информационные блоки при таком режиме возлагается на прикладное ПО.


 
amg ©   (2002-03-07 13:00) [3]

Можно. Если написать
ServerSocket1.Socket.Connections[0].SendBuf(vBuffer^, vI2);
ShowMessage("1");
ServerSocket1.Socket.Connections[0].SendBuf(vBuffer^, vI2);
Только как появляется сообщение, первый пакет уходит, и затем формируется второй. Но это очень не удобно, постоянно смотреть на эти сообщения. Нужно вместо ShowMessage, найти оптимальное решение. Вот я и спрашиваю об этом решении.


 
Digitman ©   (2002-03-07 16:31) [4]

А зачем серверу этот самый ShowMessage() ?? Это принимающей стороне (в дан.случае - клиенту) нужно отличать логические блоки информации, следующие один за другим в сплошном потоке инф-ции, отправляемой передающей стороной (в дан.случае - сервером). А, значит, каждому блоку информации в потоке непрерывно передаваемых блоков должен предшествовать некий определенный блок-префикс (это и входит в понятие "протокола информационного обмена"). Принимающая сторона должна в этом случае прочитать из потока префикс (ожидаемого размера и содержания, по соглашениям с передающей стороной), и, если таковой принят и корректен, следом прочитать собственно ожидаемый следом блок данных. В противном случае возникает ситуация т.н. "логической рассинхронизации" (несоответствие протоколу инф.обмена) и соединение д.б. разорвано по иниц-ве принимающей стороны, т.к. дальнейшие попытки принять корректную инф-цию практически бессмысленны.


 
amg ©   (2002-03-07 16:46) [5]

Вот именно, так мне и нужно. То есть, в начале каждого пакета идет ниформация(блок-префикс). ShowMessage() в частности я привел как пример, что эти две стоки можно скинуть в разные потоки (а Вы говорите нет!). И мне не вместо ShowMessage() нужно что-то поставить другое, для простого разъединения пакетов.


 
digitman ©   (2002-03-07 17:09) [6]

причем здесь ShowMessage() ?? И поток - всего один ! Откуда у тебя их больше одного-то взялось ?


with ServerSocket1.Socket.Connections[0] do begin
SendBuf(Prefix, PrefixSize); //префикс
SendBuf(vBuffer^, vI2); //след. за ним блок
SendBuf(Prefix, PrefixSize); //префикс
SendBuf(vBuffer^, vI2); //след. за ним блок
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
3-64505
ZDN
2002-04-16 09:19
2002.05.20
Где взять IB for Novell 4.x, 5.X


14-64838
Алексей Петров
2002-04-12 11:12
2002.05.20
Что за шара IPC$? Чего-то не могу найти информацию, зачем её


3-64489
Filippov Stas
2002-04-21 00:27
2002.05.20
Функции в SQL.


1-64663
Демон
2002-05-04 17:42
2002.05.20
Как отключить кнопку Windows?!?!?!?


1-64633
Riko
2002-05-08 12:56
2002.05.20
Переустановка компонентов...