![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ожидание ответа сервера.
Manfred © (2003-06-14 01:51:00)
Уважаемые мастера, помогите, пожалуйста, решить проблему.
Имеется ClientSocket и ServerSocket. Последний всё время сыпет в сеть различную информацию, может и отвечать на запросы клиента. Ответ сервера на конкретный запрос клиента заранее известен. Вопрос: как этот ответ выудить из общего потока информации? Для чего это нужно: клиент посылает запросы на сервер, но каждый последующий запрос может быть послан только после получения ответа сервера.
С уважением, Manfred
Зашел на огонёк (2003-06-16 22:11:00) [1]
> Digitman © (16.06.03 13:59)
> > Зашел на огонёк
> в условиях интерсети это работать не будет
> в ЛВС же - при определенных условиях
Ну я просто предложил вариант :)
В ЛВС у меня всегда работает.
Manfred (2003-06-16 15:54:00) [2]
Спасибо, мастера. Немного не то, но подтолкнули меня к правильному решению. Вообще, заметил за собой вот что: довольно долго не могу решить проблему, но стоит у кого-либо спросить - ответ почему-то приходит.
Хоть не решай сам, а сразу спрашивай :-)
Digitman (2003-06-16 13:59:00) [3]
> Зашел на огонёк
в условиях интерсети это работать не будет
в ЛВС же - при определенных условиях
Зашел на огонёк (2003-06-16 13:53:00) [4]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 11:39:00) [5]
> Manfred
Значит, всякий раз после посылки строки-запроса тебе нужно в принимаемом от сервера потоке пропустить первые N байт (длина возвращаемой эхо-строки запроса, она тебе заранее известна) и следом же считывать фрагмент потока, содержащий непосредственно ответ на строку запроса.
Manfred (2003-06-16 11:11:00) [6]
> Digitman
Понял, о чем речь.
Я посылаю запрос серверу (строку). Сервер в общем потоке информации возвращает мне мою строку и тут же ответ на мой запрос.
Manfred (2003-06-16 11:07:00) [7]
> Song
Но мне нужно выделить из массы информации ответ именно мне. Сервер постоянно что-то говорит и необязательно именно мне.
Manfred (2003-06-16 11:05:00) [8]
> Digitman
Если можно - подробнее, не совсем понятно, о чем речь.
Digitman (2003-06-16 08:59:00) [9]
> Manfred
Есть такое понятие - "протокол информационного обмена" между клиентом и сервером. Каков он в твоем случае ?
Song (2003-06-14 11:46:00) [10]
После посылки сообщения, ожидай ответа, что он дошёл, и пока ответ не придёт, другой информации не посылай.