Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.46 MB
Время: 0.009 c
14-68480
ZeroDivide
2003-08-06 09:00
2003.08.21
С начала я бросил курить...


4-68584
LOX
2003-06-18 18:18
2003.08.21
Позиция курсора в Tmemo.


1-68258
Miralex
2003-08-07 10:05
2003.08.21
значки в treeview


14-68516
CD
2003-08-05 15:04
2003.08.21
Компонент


3-68149
Magic&Wizard
2003-07-25 14:44
2003.08.21
HELP FireBird 1.5 как его запустить... ни чего не понимаю :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский