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

Вниз

У Клиента в сокете остается инфа?   Найти похожие ветки 

 
Dimich1978   (2003-02-07 15:01) [0]

в программе Сервер отсылает команду клиенту чтобы тот из БД считал данные и переслал их серверу. Все работает на этом уровне нормально, но как только сервер посылает эту команду повторно от клиента приходят сообщения(все что нового появилось в БД)+ сообщения которые он уже переслал, хотя физичеки в БД этих записей уже нет, т.к. они были удалены после того как сервер принял данные в первый раз. Такое ошющение как будто в сокете клиента эти данные храняться и каждый раз вместе с данными(которые текущие) еще и передает данные которые были физически удалены, но остались каким то образом в сокете(клиента).
Как можно с этим бороться и вообще кто нибудь сталкивался с такой проблемой. За все советы заранее всем благодарен.


 
mrcat   (2003-02-07 15:28) [1]

приведите код, где осуществляется передача/прием


 
dimich1978   (2003-02-07 16:14) [2]

Прием: Использую юнит, где происходит расклейка пакетов
Procedure tform1.DataProcessing(const S:ansiString);
var ss,ss1:ansistring;
k,i:integer;
begin
k:=0;
ss1:=s;
ss:=copy(s,5,length(s));
//Название компов собираем в combobox
if copy(s,0,4)="comp" then
begin
for i:=0 to combobox1.Items.count-1 do
if ss=combobox1.Items.strings[i] then k:=1;
if k=0 then combobox1.Items.add(ss);
end;

if (s="Go") then flag1:=0;
if s="Stop" then
begin
memo2.lines.add(s);
for i:=0 to 10 do mas[i]:="";
flag1:=1;
flag2:=0;
vseg:=0;
end;
if flag1=0 then
begin
memo2.lines.add(s);
flag2:=flag2+1;
if (flag2>=2)and (flag2<=6) then
begin
vseg:=vseg+1;
mas[vseg]:=s;
memo1.lines.Add(mas[vseg]);
end;
if (flag2=6) then
begin
table1.close;
table1.open;
table1.insert;
table1.Fields[0].asstring:=mas[1];
table1.Fields[1].asstring:=mas[2];
table1.Fields[2].asstring:=mas[3];
table1.Fields[3].asstring:=mas[4];
table1.Fields[4].asstring:=mas[5];
table1.post;
flag2:=0;
vseg:=0;
end;
end;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
ReceiveLongText(Socket,DataProcessing);
end;

-----------
Передеча:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var sm,s,s1:string;
buf:ansistring;
i:integer;
begin
buf:=socket.receiveText;//Читаю что пришло от сервера
s1:=copy(buf,0,5);
sm:=copy(buf,6,length(buf));
if "clear"=buf then begin
for i:=0 to table1.RecordCount-1 do begin
table1.delete;
table1.next;
end;
end;
if ("start"=s1) and (sm=label1.caption) then /Если все сошлось то выполнить
timer3.Enabled:=false;
begin
// теперь отсылаем все серверу из БД используя функцию из доп. юнита, этот юнит можно найти в базе готовых решений. Прислал: Subfire (Санкт-Петербург) ( 2 октября 2002 г. )
table1.first;
for i:=0 to table1.RecordCount-1 do begin
SendLongText(ClientSocket1.Socket,"Go");
SendLongText(ClientSocket1.Socket,table1.fields[0].asstring);
SendLongText(ClientSocket1.Socket,table1.fields[1].asstring);
SendLongText(ClientSocket1.Socket,table1.fields[2].asstring);
SendLongText(ClientSocket1.Socket,table1.fields[3].asstring);
SendLongText(ClientSocket1.Socket,table1.fields[4].asstring);
table1.Next;
end;
SendLongText(ClientSocket1.Socket,"Stop");
timer3.enabled:=true;
end;
end;
ВСЕ ПАКЕТЫ ПОЛУЧАЮТСЯ РАСКЛЕЕНЫМИ, ВСЕ НОРМАЛЬНО, но с данные каким то образом сохраняются в буфере сокета. Может быть просто буфер очистить.....только каким образом?


 
mrcat   (2003-02-07 16:39) [3]

1. что делают SendLongText, ReceiveLongText?
2. Где уверенность, что тут:
buf:=socket.receiveText;//Читаю что пришло от сервера
...
if "clear"=buf then begin

Вы получите в buf именно "clear"?


 
mrcat   (2003-02-07 16:49) [4]

dimich1978 © (07.02.03 16:14)
Может быть просто буфер очистить.....только каким образом?


Если все сделано правильно - буфер очищается после чтения данных.


 
Digitman   (2003-02-07 17:08) [5]


> buf:=socket.receiveText;//Читаю что пришло от сервера


а от сервера, к примеру, пришло "cl" ? или "clea" ?
и только при возникновении очередного OnRead() придет "остаток" - "ear" или "r" ?

что будешь делать в таком случае ?



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

Форум: "Сети";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
1-100314
MAX_
2003-03-19 16:25
2003.03.31
Запуск EXCEL


3-100179
td
2003-03-12 19:36
2003.03.31
зачем нужны индексы?


3-100151
neXt
2003-03-12 16:57
2003.03.31
Timeout BDE


14-100428
aga
2003-03-14 11:44
2003.03.31
*.sit


3-100166
just_1869
2003-03-11 02:22
2003.03.31
Ошибка соединения через DataSnap с MS SQL 2000





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