Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > TServerSocket и TClientSocket


Автор: 2134 1.2.2010, 06:28
Как можно реализовать постоянный коннект с клиентом.
Как уже обсуждалось - клиент может отключится или его выбьет, тогда у всех отсальных клиентов connect-1 после него.

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

Пишу игру и в ней постоянный обмен данными, когда клиент выключается данные которые я хотел отослать в этот же момент кому-то, могут не тому прийти.
Не хотел нагружать процесс постоянной проверкой активности коннект или проверкой его.

Интересно, есть ли возможность заморозить коннект, чтоб всегда висел на одном и том же месте или что-то в этом роде.

Автор: Snowy 1.2.2010, 11:17
Просто смени идентификацию.
Используй не номер в списке, а указатель на соединение.
На номерах далеко не уежешь.

Автор: 2134 1.2.2010, 21:10
Используй не номер в списке, а указатель на соединение.

Что за указатель? Можно подробнее?

Автор: Snowy 2.2.2010, 12:14
А это зависит от используемой логики.
Если нужно обращение к конкретному клиенту, то лучше запоминать для него не его номер, а прямую ссылку на него, как TCustomWinSocket.
Если проблема в том, что клиент отключается в момент отправки данных всем по списку, то просто нужно подстраховаться:
Код
var
  i: Integer;
  c: TCustomWinSocket;
begin
  srv := TServerSocket.Create(self);
  srv.Socket.Lock;
  for i := srv.Socket.ActiveConnections - 1 downto 0 do
  try
    c := srv.Socket.Connections[i]; // вот так мы можем получить ссылку на конкретный коннект 
                                      // и использовать потом ее саму по себе
    c.SendText('Что-то шлю...'); // но здесь она используется сразу - без запоминания
  finally end;
  srv.Socket.Unlock;
end;

Автор: 2134 3.2.2010, 04:46
Спасибо, но я уже переписал эти компоненты и добавил все что меня интересовало.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)