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

Вниз

Вопрос по ClientSocket и ServerSocet-у   Найти похожие ветки 

 
JFX ©   (2003-07-16 06:20) [0]

ClientSocket1.Host:=ServerName;
ClientSocket1.Open;
ClientSocket1.Socket.SendText("#NickId"+Nick);

Почему ServerSocket1 не сразу принимает сообщение, а только со второй или третьей попытки и то на событие ClientRead а на ClientWrite буфер пустой?
Буду очень признателен за помошь..


 
Rouse_ ©   (2003-07-16 06:24) [1]

Первый вариант: кривой прием
Второй ваиант: кривые настройки сети
Третий вариант: с учетом уровня приведенного кода, на этом мысли останавливаются

Желаю успехов


 
Digitman ©   (2003-07-16 08:24) [2]

установи св-во ClientType = ctBlocking.


> на ClientWrite буфер пустой


а почему он должен быть полным ? сервер разве что-то отправляет клиенту ?


 
Fredericco ©   (2003-07-16 10:21) [3]

1) Принимает не с первого раза - проблемы в твоей программе.
2) При не блокирующем режиме, и на сервере и на клиенте, метод OnRead срабатывает, когда в буфере приема что-то есть. OnWrite - срабатывает, когда сокет готов к отправке данных, например, после того, как переполненный буфер на отправку наконец освободился.


 
Fredericco ©   (2003-07-16 10:36) [4]

При не блокирующем режиме такой код неверный

> ClientSocket1.Open;
> ClientSocket1.Socket.SendText("#NickId"+Nick);

Метод Open выполняется как бы в отдельном потоке. И об успешном или нет ее выполнении тебе сообщит OnConnect/OnError соответственно. А о том что сокет готов к отправке данных тебе сообщит первый вызов OnWrite после успешного выполнения Open.


 
JFX ©   (2003-07-17 08:20) [5]

бывает такая ситуация..
посылаю...
ClientSocket1.Socket.SendText("1");
ClientSocket1.Socket.SendText("2");


procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Command:=Trim(Socket.ReceiveText);

command=="12"
т.е. они идут одним текстом...
приходиться ставить задержку и только тогда все ок..


 
Digitman ©   (2003-07-17 09:22) [6]


> JFX


> бывает такая ситуация


нормальная ситуация ! TCP-протокол-то - поточно-ориентированный !

не нужна здесь задержка.
достаточно, получив в событии OnRead() строку с несколькими идущими подряд "командами", провести парсинг и разбить строку на отдельные команды



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
7-58958
CKOTu
2003-07-07 10:16
2003.09.18
Как прочитать значение REG_MULTI_SZ?


7-58923
e_a
2003-07-07 20:07
2003.09.18
контроллеры


1-58694
Denkop
2003-09-08 15:44
2003.09.18
Проверка Image1.Picture=nil


7-58921
MakNik
2003-07-08 09:13
2003.09.18
PostMessage(Wnd,WM_Close,0,0);


3-58589
Bes
2003-08-28 05:02
2003.09.18
Проблема... Access