![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужна помощь с сокетами [D5, Win95/98]
Gregson © (2002-07-25 19:26:00)хочу написать подобие почтового клиента, используя компоненту ClientSocket, соединяюсь с сервером, потом посылаю команды, сервер присылает мне ответы, естессно их обрабатывает процедура события OnRead, ответы валются валом и я немогу точно определить на какую мою команду пришел ответ ! как мне поступить, немогу придумать
хотелось бы как то научится распознавать ответы сервера
например что следующая строка +OK 32 12387 это ответ именно на команду stat, а не на авторизацию или еще какую нить ! если не лнь печатать, напишите как !
Anatoly Podgoretsky (2002-09-26 17:42:00) [1]Без машины состояний никуда не деться
Ghost. (2002-09-26 17:29:00) [2]например при ошибках 500, 501,502,503 сервер соединение не разрывает а предлагает внести изменения. тоесть транзакцию можно продолжить.. а вот при ошибках 550, 552, 554 сервер как правило отвечает поным отказом...
exchoper (2002-09-26 16:23:00) [3]что значит не подразумевающий прекращение соединение?
в двух словах:
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 13:30:00) [4]
> exchoper ©
а если придет код ошибки не подразумевающий прекращение соединения тогда как?
exchoper (2002-09-26 11:56:00) [5]можно попробовать ставить у сокета ctBlocking тогда все отсылаться и приниматься будет последовательно в одном потоке и проблемы определения на какой запрос пришел ответ стоять не будет
Ghost. (2002-09-26 10:48:00) [6]Да придется считать команды..и тока так..
x-mag (2002-09-25 19:22:00) [7]Я использую компонент IdTCP и все :)
Зфгд (2002-09-05 17:37:00) [8]можно попробовать давать вопросам номера, которые потом и присылать в ответе. Только помнить придется что спрашивал.
Alex Vulpe (2002-09-04 23:27:00) [9]Поставь в ответах сам вопрос, например:
user fuck = ОК
stat = КО 32 12387
и т.д.
Gregson (2002-07-26 11:49:00) [10]Само собой, я сразу посылаю три команды user fuck, pass fuck, stat!
а как же по другому ?
я спрашиваю по какому алгоритму мне постоить программу чтоб я точно знал на какую мою команду пришел ответ !
Ghost. (2002-07-26 09:20:00) [11]Ответы валом валиться немогут никак..если ты не пошлешь стат то хрен он тебе че ответит будет ждать а потом по таймауту соединение разорвет