Главная страница
    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.006 c
1-100225
JibSkeart
2003-03-20 13:56
2003.03.31
Как узнать какая компонента(имя) вызвала процедуру


8-100333
Yury
2002-12-26 11:29
2003.03.31
Video files


3-100144
off
2003-03-12 13:55
2003.03.31
Подскажите в чем проблема!


7-100476
Feofan
2003-02-06 13:03
2003.03.31
Список устройств компьютерА (WMI)


6-100357
Cosmic
2003-02-03 08:39
2003.03.31
Как отключить компьютер от сети?





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