![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по ClientSocket и ServerSocet-у
JFX © (2003-07-16 06:20:00)
ClientSocket1.Host:=ServerName;
ClientSocket1.Open;
ClientSocket1.Socket.SendText("#NickId"+Nick);
Почему ServerSocket1 не сразу принимает сообщение, а только со второй или третьей попытки и то на событие ClientRead а на ClientWrite буфер пустой?
Буду очень признателен за помошь..
Digitman (2003-07-17 09:22:00) [1]
> JFX
> бывает такая ситуация
нормальная ситуация ! TCP-протокол-то - поточно-ориентированный !
не нужна здесь задержка.
достаточно, получив в событии OnRead() строку с несколькими идущими подряд "командами", провести парсинг и разбить строку на отдельные команды
JFX (2003-07-17 08:20:00) [2]
бывает такая ситуация..
посылаю...
ClientSocket1.Socket.SendText("1");
ClientSocket1.Socket.SendText("2");
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Command:=Trim(Socket.ReceiveText);
command=="12"
т.е. они идут одним текстом...
приходиться ставить задержку и только тогда все ок..
Fredericco (2003-07-16 10:36:00) [3]
При не блокирующем режиме такой код неверный
> ClientSocket1.Open;
> ClientSocket1.Socket.SendText("#NickId"+Nick);
Метод Open выполняется как бы в отдельном потоке. И об успешном или нет ее выполнении тебе сообщит OnConnect/OnError соответственно. А о том что сокет готов к отправке данных тебе сообщит первый вызов OnWrite после успешного выполнения Open.
Fredericco (2003-07-16 10:21:00) [4]
1) Принимает не с первого раза - проблемы в твоей программе.
2) При не блокирующем режиме, и на сервере и на клиенте, метод OnRead срабатывает, когда в буфере приема что-то есть. OnWrite - срабатывает, когда сокет готов к отправке данных, например, после того, как переполненный буфер на отправку наконец освободился.
Digitman (2003-07-16 08:24:00) [5]
установи св-во ClientType = ctBlocking.
> на ClientWrite буфер пустой
а почему он должен быть полным ? сервер разве что-то отправляет клиенту ?
Rouse_ (2003-07-16 06:24:00) [6]
Первый вариант: кривой прием
Второй ваиант: кривые настройки сети
Третий вариант: с учетом уровня приведенного кода, на этом мысли останавливаются
Желаю успехов