Форум: "Сети";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
ВнизОжидание ответа сервера. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c