Главная страница
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.027 c
14-69544
AZ
2002-11-03 06:39
2002.11.21
Label для написания химических формул


14-69500
delpher_gray
2002-10-31 19:29
2002.11.21
Как расположить числа в подярке убывания


3-69100
iKS1
2002-11-02 11:25
2002.11.21
Использование API


14-69550
RV
2002-11-04 09:56
2002.11.21
Как получить результат из asm-процедуры, скажем, в строку?


1-69298
Tomb
2002-11-12 10:18
2002.11.21
Отправка и получение сообщений через MAPI