Форум: "Сети";
Текущий архив: 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