![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему сообщения отсылаются не попорядку?... =((( [D7, WinXP]
Andrewtitoff © (2008-02-14 22:31:00)Здравствуйте!, я использую пару клиент-сервер для реализации чего то вроди чата с расширенныли функциями
Вот часть кода:
......
procedure TMyChat.SendCommand(s:string);
begin
TcpClient1.Active := True;
try
if TcpClient1.Connect then
begin
TcpClient1.Sendln(s);
Edit.Clear;
end;
finally
TcpClient1.Disconnect;
end;
end;
.............
procedure TMyChat.Button1Click(Sender: TObject);
var
c : boolean;
begin
Display.Lines.Add(Edit.Text);
........
if UpperCase(Edit.Text) ='DIR' then
Begin
SendCommand('Command : DIR');
c:=true;
end;
..........
procedure TMyChat.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
.......
begin
try
CurrentCommand:=ClientSocket.Receiveln;
Display.Lines.Add('Server : '+CurrentCommand);
.........
if CurrentCommand='Command : DIR' then
begin
GetDir(0,CurrentDir);
SEndCommand('Директория : '+CurrentDir);
SEndCommand('-------------------------------------');
if FindFirst(CurrentDir + '\*.*', faAnyFile, tt) = 0 then
begin
repeat
if tt.Attr = faDirectory then
SendCommand('[DIR]'+tt.Name)else
SendCommand(tt.Name+' [Size : '+inttostr(tt.SIZE)+']');
until FindNext(tt) 0;
FindClose(tt);
end;
SEndCommand('Конец-------------------------------');
end;
......
except
on E:Exception do
begin
if ClientSocket.Connected then
ClientSocket.Sendln('-ERR Raised exception with message: '+E.Message)
else
raise;
end;
end;
CurrentCommand:='';
end;
а получается иногда нормально, но чаще байда на пример такая:
dir
Server : Директория : C:\Documents and Settings\Felix\Рабочий стол\EXT_New !!!_My_Chat_TcpServer&TcpClient
Server : My_Chat.dpr [Size : 238]
Server : [DIR]..
Server : [DIR].
Server : -------------------------------------
Server : My_Chat.dproj [Size : 3054]
Server : My_Chat.dproj.local [Size : 1850]
Server : My_Chat.exe [Size : 494080]
Server : My_Chat.identcache [Size : 199]
Server : My_Chat.res [Size : 5280]
Server : My_Chat_.dcu [Size : 19486]
Server : My_Chat_.dfm [Size : 2279]
Server : My_Chat_.pas [Size : 8260]
Server : Конец-------------------------------
Сергей М. (2008-02-15 14:37:00) [21]10061 = WSAECONNREFUSED = The attempt to connect was forcefully rejected = Запрос на соединение (попытка коннекта к заданному порту) отвержен сервером (т.е. указанный клиентом порт сервера на момент попытки коннекта не активен)
Andrewtitoff (2008-02-15 14:29:00) [22]Небольшой вопросик не по теме:
Чем может быть вызвана ошибка "Cannot remove shell notification icon"?
Andrewtitoff (2008-02-15 14:27:00) [23]а в чем тогда может быть дело?
Сергей М. (2008-02-15 14:21:00) [24]Между файловыми атрибутами и упомянутой ошибкой нет никакой связи.
Andrewtitoff (2008-02-15 11:25:00) [25]Может это все брандмауэр виндовсовский?...
Andrewtitoff (2008-02-15 11:10:00) [26]Ясно, тут кстати вылезла еще одна проблемка, когда я пытаюсь переслать файл как я понял с системными атрибутами (с:\autorun.exe) то выскакивает ошибка Socket Error 10061, она кстати выскакивает периодически в процедуре DIR на удаленном конце при просмотре корня...
Сергей М. (2008-02-15 10:43:00) [27]
> Andrewtitoff © (15.02.08 10:28) [10]
Понятно.
Но в любом случае вывод инф-ции в визуальный VCL-контрол следует выполнять в основномпотоке приложения.
Andrewtitoff (2008-02-15 10:28:00) [28]2 Сергей М.
>Зачем ее выводить ? Для протокола что ли ?
Ну это типа терминала, там мне нужно отправлять туда и обратно файло, как я без вывода информации то это делать буду, тем более я же привел одну из процедур (DIR), как я еще без вывода узнаю о содержимом удаленного винта?...
Сергей М. (2008-02-15 10:21:00) [29]
> Ну вроде работает
Рано или поздно настанет "судный день" - в этот день ты обязательно получишь исключением (например, "canvas doesn't allow drawing") по лбу)
> как выводить информацию
Зачем ее выводить ? Для протокола что ли ?
> за основу этой проги взят пример из седьмой дельфи (Chat)
Там совсем другие компоненты использованы.
Andrewtitoff (2008-02-15 10:13:00) [30]2 Сергей М.
Ну вроде работает...
А как выводить информацию тогда, мне же так никто и не сказал..., кстати за основу этой проги взят пример из седьмой дельфи (Chat)...
Сергей М. (2008-02-15 09:23:00) [31]
> Display.Lines.Add(
Я не перестаю удивляться, как тебе нравится раз за разом получать одними и теми же граблями по одному и тому же лбу).. Мазохист ?)
Ты уже раза 3-4 приводил фрагменты своих обработчиков OnAccept, всякий раз тебе было сказано о недопустимости обращений к визуальным VCL-контролам в обработчике этого события, но ты по-прежнему делаешь одну и ту же упомянутую грубую ошибку)
Slym (2008-02-15 06:11:00) [32]Slym © (15.02.08 6:10) [5]
TcpClient1.Sendln
ClientSocket.Sendln
Slym (2008-02-15 06:10:00) [33]Andrewtitoff © (14.02.08 22:31)
SendCommand
Ты забыл добавить что долго отправляет/принамает еще...
твой SendCommand обрывает соединение
finally
TcpClient1.Disconnect;
end;
и отправка идет в несколько соединений, а тут порядок никто не гарантирует!
если заменить SendCommand на TcpClient1.Sendln все должно работать
ketmar (2008-02-15 02:52:00) [34]тьфу!
---
Understanding is not required. Only obedience.
ketmar (2008-02-15 02:51:00) [35]>[2] Andrewtitoff © (2008-02-14 22:44:00)
порядок даже не пытался ачмоиовать.
п с финдом… хэдп читал? я вижу, что нет.
---
Understanding is not required. Only obedience.
Andrewtitoff (2008-02-14 22:44:00) [36]2 ketmar
Сообщения выводятся не в том порядке, в котором я их отправляю...
А что не так с FindXXX?
ketmar (2008-02-14 22:37:00) [37]ну, не делай «байды».
собственно — а что не так? (помимо неверной работы с FindXXX)
---
Understanding is not required. Only obedience.