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

Вниз

Нужна помощь с сокетами   Найти похожие ветки 

 
Gregson   (2002-07-25 19:26) [0]

хочу написать подобие почтового клиента, используя компоненту ClientSocket, соединяюсь с сервером, потом посылаю команды, сервер присылает мне ответы, естессно их обрабатывает процедура события OnRead, ответы валются валом и я немогу точно определить на какую мою команду пришел ответ ! как мне поступить, немогу придумать
хотелось бы как то научится распознавать ответы сервера
например что следующая строка +OK 32 12387 это ответ именно на команду stat, а не на авторизацию или еще какую нить ! если не лнь печатать, напишите как !


 
Ghost. ©   (2002-07-26 09:20) [1]

Ответы валом валиться немогут никак..если ты не пошлешь стат то хрен он тебе че ответит будет ждать а потом по таймауту соединение разорвет


 
Gregson   (2002-07-26 11:49) [2]

Само собой, я сразу посылаю три команды user fuck, pass fuck, stat!
а как же по другому ?

я спрашиваю по какому алгоритму мне постоить программу чтоб я точно знал на какую мою команду пришел ответ !


 
Alex Vulpe   (2002-09-04 23:27) [3]

Поставь в ответах сам вопрос, например:
user fuck = ОК
stat = КО 32 12387

и т.д.


 
Зфгд   (2002-09-05 17:37) [4]

можно попробовать давать вопросам номера, которые потом и присылать в ответе. Только помнить придется что спрашивал.


 
x-mag ©   (2002-09-25 19:22) [5]

Я использую компонент IdTCP и все :)


 
Ghost. ©   (2002-09-26 10:48) [6]

Да придется считать команды..и тока так..


 
exchoper ©   (2002-09-26 11:56) [7]

можно попробовать ставить у сокета ctBlocking тогда все отсылаться и приниматься будет последовательно в одном потоке и проблемы определения на какой запрос пришел ответ стоять не будет


 
Ghost. ©   (2002-09-26 13:30) [8]


> exchoper ©

а если придет код ошибки не подразумевающий прекращение соединения тогда как?


 
exchoper ©   (2002-09-26 16:23) [9]

что значит не подразумевающий прекращение соединение?
в двух словах:
try
ClientSocket.Active:=TRUE;
try
ClientSocket.Socket.SendBuf(Data, len);
ClientSocket.Socket.ReceiveBuf(Data, len);
finally
ClientSocket.Active:=FALSE;
end;
except
on E:Exception do begin .... end;
end;

в деле все будет сложнее, это костяк, там еще кучу всего контролировать надо, а если случилась ошибка, при установке соединения, приеме или отправке буфера, то тут уже нужно путаться все заного проделать или сказать что траблы с соединением...


 
Ghost. ©   (2002-09-26 17:29) [10]

например при ошибках 500, 501,502,503 сервер соединение не разрывает а предлагает внести изменения. тоесть транзакцию можно продолжить.. а вот при ошибках 550, 552, 554 сервер как правило отвечает поным отказом...


 
Anatoly Podgoretsky ©   (2002-09-26 17:42) [11]

Без машины состояний никуда не деться



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
1-69254
Loser
2002-11-11 19:50
2002.11.21
Работа с Памятью


14-69485
Николай Быков
2002-10-31 15:15
2002.11.21
А если вот так?


1-69246
Nick-From
2002-11-09 21:37
2002.11.21
Такой вот вопрос


1-69405
Праведник
2002-11-10 22:45
2002.11.21
wav формат


4-69638
relict
2002-10-11 14:38
2002.11.21
как создать папку?