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

Вниз

Ожидание ответа сервера.   Найти похожие ветки 

 
Manfred ©   (2003-06-14 01:51) [0]

Уважаемые мастера, помогите, пожалуйста, решить проблему.
Имеется ClientSocket и ServerSocket. Последний всё время сыпет в сеть различную информацию, может и отвечать на запросы клиента. Ответ сервера на конкретный запрос клиента заранее известен. Вопрос: как этот ответ выудить из общего потока информации? Для чего это нужно: клиент посылает запросы на сервер, но каждый последующий запрос может быть послан только после получения ответа сервера.
С уважением, Manfred


 
Song ©   (2003-06-14 11:46) [1]

После посылки сообщения, ожидай ответа, что он дошёл, и пока ответ не придёт, другой информации не посылай.


 
Digitman ©   (2003-06-16 08:59) [2]


> Manfred


Есть такое понятие - "протокол информационного обмена" между клиентом и сервером. Каков он в твоем случае ?




 
Manfred ©   (2003-06-16 11:05) [3]


> Digitman

Если можно - подробнее, не совсем понятно, о чем речь.


 
Manfred ©   (2003-06-16 11:07) [4]


> Song

Но мне нужно выделить из массы информации ответ именно мне. Сервер постоянно что-то говорит и необязательно именно мне.


 
Manfred ©   (2003-06-16 11:11) [5]


> Digitman

Понял, о чем речь.
Я посылаю запрос серверу (строку). Сервер в общем потоке информации возвращает мне мою строку и тут же ответ на мой запрос.


 
Digitman ©   (2003-06-16 11:39) [6]


> Manfred


Значит, всякий раз после посылки строки-запроса тебе нужно в принимаемом от сервера потоке пропустить первые N байт (длина возвращаемой эхо-строки запроса, она тебе заранее известна) и следом же считывать фрагмент потока, содержащий непосредственно ответ на строку запроса.


 
Зашел на огонёк   (2003-06-16 13:53) [7]

type
tmy=record
name: string[20];
msg1: string[255];
idmsg: byte;
end;
...
var m: tmy;
...
//отправка
m.name:="Server";
m.msg1:="Все есть!";
m.idmsg:=0;
ServerSocket1.Socket.Connections[n].SendBuf(m,sizeof(m));
...

//получение
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var m: tmy;
begin
Socket.ReceiveBuf(m,sizeof(m));
case m.idmsg of
0: Label2.Caption:=m.msg1;
//здесь точно такая же отправка
m.name:="Client_1";
m.msg1:="А ботинки есть?";
m.idmsg:=0;
( m,sizeof(m) type
tmy=record
name: string[20];
msg1: string[255];
idmsg: byte;
end;
...
var m: tmy;
...
//отправка
m.name:="Server";
m.msg1:="Все есть!";
m.idmsg:=0;
ServerSocket1.Socket.Connections[n].SendBuf(m,sizeof(m));
...

//получение
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var m: tmy;
begin
Socket.ReceiveBuf(m,sizeof(m));
case m.idmsg of
0: Label2.Caption:=m.msg1;
//здесь точно такая же отправка
m.name:="Client_1";
m.msg1:="А ботинки есть?";
m.idmsg:=0;
ClientSocket1.Socket.SendBuf(m,sizeof(m));
end;
end;



 
Digitman ©   (2003-06-16 13:59) [8]


> Зашел на огонёк


в условиях интерсети это работать не будет
в ЛВС же - при определенных условиях


 
Manfred ©   (2003-06-16 15:54) [9]

Спасибо, мастера. Немного не то, но подтолкнули меня к правильному решению. Вообще, заметил за собой вот что: довольно долго не могу решить проблему, но стоит у кого-либо спросить - ответ почему-то приходит.
Хоть не решай сам, а сразу спрашивай :-)


 
Зашел на огонёк   (2003-06-16 22:11) [10]


> Digitman © (16.06.03 13:59)
> > Зашел на огонёк
> в условиях интерсети это работать не будет
> в ЛВС же - при определенных условиях

Ну я просто предложил вариант :)
В ЛВС у меня всегда работает.



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
8-68413
DarkwayDiman
2003-04-25 01:32
2003.08.21
Обработчик DirectX


14-68496
Математ
2003-08-04 19:12
2003.08.21
Математическая бибилиотека


1-68395
Man
2003-08-07 17:12
2003.08.21
использовать классы,описанные в dll


3-68177
mnsdn
2003-07-29 07:23
2003.08.21
Удаление записи


14-68460
_Polymorphic_
2003-07-30 10:52
2003.08.21
Девушки-программистки. Миф или реальность?