Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

Socket ы   Найти похожие ветки 

 
Alex90210   (2002-08-02 13:46) [0]

Мистика в следующем: есть два приложения один клиент и один сервер
они соединяются не блокирующим соединением (NonBlocking). Клиент передает текст методом SendText сервер по событию OnClienRead считывает текст методом ReciveText. Короче все как в деме "Chat". До поры до времени все нормально, но рано или позно все поростает. Клиент продолжает передавать сообщения, а сервер виснет (не принимает). Подскажите чего ждет сервер и как сдвинуть его с мертвой точки. Заранее благодарен.


 
Digitman   (2002-08-02 13:54) [1]

Где код ? Клиента и сервера ?


 
Alex90210   (2002-08-02 14:08) [2]

Код сервера:
procedure TForm1.StartClick(Sender: TObject);
begin
ServerSocket1.Port:=101;
ServerSocket1.Open();
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
buf: string;
l: integer;
begin
Memo1.Lines.Insert(0,Socket.ReceiveText);
end;

Код которым клиент отправляет текст:
procedure Thread1.Execute;
var
begin
while StopFlag do
begin
CS.Socket.SendText("message"+IntToStr(Counter));
sleep(300);
end;
end;


 
Digitman   (2002-08-02 14:26) [3]

1. Где обработка события OnWrite ?

2.
>> sleep(300);
а это зачем ? откуда взялась цифирь "300" ?



 
Alex90210   (2002-08-02 14:41) [4]

А зачем обрабатывать OnWrite? Цыфирь 300 моделирует работу содержательной части, а приведенный код - это тест пример. Надо добиться устойчивой передачи сообщения раз в 300 m.


 
Digitman   (2002-08-02 14:49) [5]

>Alex90210

Не будет у тебя никогда устойчивой передачи, если ты игногируешь событие OnWrite() (готовность буфера передатчика). Это - асинхронный режим !

Точного периода готовности передатчика ты тоже не определишь и не вычислишь . Ни спомощью sleep() ни спомощью иной "цифири". Передатчик в асинхронном режиме работает сам по себе, его работа зависит от множества факторов, и ему глубоко "начхать" на твои задержки. А вот о факте своей готовности (когда передатчик успешно "выплюнет" в сеть весь буфер, что ты со скоростью 1 раз в 300 ms наращиваешь, считая, что буфер бездонный и сеть работает мгновенно), передатчик и сообщит тебе событием OnWrite()


 
Digitman   (2002-08-02 14:54) [6]

а вот сюда, в хэлп :

SendText returns 0 if the string was successfully written. It returns a nonzero value if the writing must be postponed. When SendText returns a nonzero value, it must be called again later to write the value over the connection.

ты вообще не удосужился взглянуть, потому что писан он для Пушкина ... Какой же "устойчивой передачи" ты хочешь при таком подходе к серьезнейшим задачам сетевого взаимодействия ?


 
Alex90210   (2002-08-02 14:57) [7]

Извиняюсь за свою темность, просто работую с этим первый раз. Так как мне таки передать сообщение чтоб все было нормально.


 
Digitman   (2002-08-02 15:04) [8]

Цитата из хэлпа в Digitman © (02.08.02 14:54) тебе ни о чем не говорит ?


 
Alex90210   (2002-08-02 15:13) [9]

Ну вот вроде понял. Ща попробую. Спасибо за помощь, впредь буду серьезно относиться к задачам сетевого взаимодействия.


 
Digitman   (2002-08-02 15:18) [10]

Сомневаюсь, что - понял. Вот как ты поступишь, если SendText() вернет не ноль ? Как это увязать с событием OnWrite(). Вот поразмысли над этим ...
Готов помочь только при серьезном и детальном исследовании тобой всего этого механизма...



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

Форум: "Сети";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
7-8205
ask
2002-07-24 10:26
2002.10.03
Информация о CD


3-7797
Dmitry Toropov
2002-09-10 17:14
2002.10.03
ADO не работает


14-8114
Malder
2002-09-05 00:02
2002.10.03
Кто-нибудь учиться, учился в МЭИ ?


3-7840
cherepovets
2002-09-12 15:03
2002.10.03
DBGrid


8-8074
Arhangel
2002-05-27 20:02
2002.10.03
MSAgent





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский