Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2010, 20:40   #531
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Код:
  x := 0;
  for a := 1 to 5 do
    begin
      IPRange[a].IP1 := s.Strings[x];
      IPRange[a].IP2 := s.Strings[x+1];
      Inc(x,2);
    end;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 05.08.2010, 20:15   #532
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Опять стали доставать ники Неизвестный, а на сервере всё нормально. Как-то видел тут было обсуждение, чтобы посылать не весь список юзеров, а только тех кто пришёл/ушёл, но до реализации не дошло.
Shouldercannon вне форума Ответить с цитированием
Старый 05.08.2010, 22:22   #533
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Какой смысл делать пересылку спец команд по 12 байт например, если все, что до 500 байт пролетает по сети мгновенно? ...если у сервера все в порядке, значит причина в клиенте. С добавлением разных функций вы могли запросто заткнуть сервер в общении с ним и выполнять запросы, при этом часть информации теряется для клиента. Поставьте интервал таймера больше 200 мс и проследите, что происходит у клиентов.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 05.08.2010, 22:48   #534
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Интервал стоит 500. Заметил что по выходу юзера все становятся неизвестными. И вот как сервер ещё загоняется.
Изображения
Тип файла: jpg 2.jpg (59.7 Кб, 157 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 06.08.2010, 15:40   #535
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

После создания танчиков для двоих игроков захотелось сделать их многопользовательскими. Но почему-то не работает=(

Код:
procedure TForm1.TankTimerTimer(Sender: TObject);
var
   i,j:integer;
   len:byte;
   buf:array[0..6] of byte;
begin
if TankServer.Socket.ActiveConnections<>0 then
  begin
  for i:=1 to TankServer.Socket.ActiveConnections do
    begin
    len:=TankServer.Socket.ReceiveLength;
    TankServer.Socket.ReceiveBuf(buf,len);
    if buf[0]<>0 then
      begin
      if buf[0]=1 then  //Номер танка прислали
        if buf[1]=0 then  //Если номер = 0, то новый пользователь
          begin
          j:=1;
          While TankMas[j].n<>0 do inc(j);
          buf[1]:=2;  //Посылаем ему номер и координаты
          buf[2]:=j;  //Первая свободная ячейка в массиве
          buf[3]:=1;
          buf[4]:=1;
          TankServer.Socket.Connections[i].SendBuf(buf,7); 
          end;
      end;
    end;
  if updoTank=true then
    begin
      nomer;
      updoTank:=false;
    end;
  end;
end;
Код:
procedure TForm1.nomer;
var
  i:integer;
  buf:array[0..6] of byte;
begin
//Запрос номеров танков
  buf[0]:=1;
  for i:=1 to TankServer.Socket.ActiveConnections do
    begin
    TankServer.Socket.Connections[i-1].SendBuf(buf,bufd);
    end;
end;
Код:
procedure TForm1.TankServerClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
//Новый клиент, обновляем список
  upDoTank:=true;
end;
Ошибка выскакивает здесь:
Код:
len:=TankServer.Socket.ReceiveLength;
    TankServer.Socket.ReceiveBuf(buf,len);
Изображения
Тип файла: jpg Ошибка.JPG (19.1 Кб, 96 просмотров)
Ckomoroh вне форума Ответить с цитированием
Старый 06.08.2010, 22:17   #536
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Интервал стоит 500. Заметил что по выходу юзера все становятся неизвестными. И вот как сервер ещё загоняется.
Когда кто-то подключается/отключается, запускается обновление массива, в нем всем каналам присваивается имя "Неизвестный", следом идет обновление списка, в листе это все отображается, идет последовательный запрос всем клиентам, они отвечают, и по мере прихода их ответов список заполняется их никами. Как только все ники будут записаны, сервер вышлет всем клиентам список присутствующих.

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

Ckomoroh, код, на котором возникает ошибка у сервера, в каком событии расположен? ...а, вот, вижу, в таймере, ...если длина буфера, принятого сервером, равна нулю, то брать такой буфер нельзя, нужна проверка на len > 0.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 06.08.2010 в 22:21.
Beermonza вне форума Ответить с цитированием
Старый 07.08.2010, 11:19   #537
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Проверку на подленность трудно будет сделать?
Shouldercannon вне форума Ответить с цитированием
Старый 07.08.2010, 18:05   #538
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Проверку на подленность трудно будет сделать?
Код:
  Try // попытаться
    // проверить первый байт на число (перечисление все кодов команд)
  Except // при ошибке
    // выкинуть пользователя
  end;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 08.08.2010, 21:40   #539
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Ошибки теперь нет, но теперь сервер абсолютно не принимает никаких буферов.
Ckomoroh вне форума Ответить с цитированием
Старый 08.08.2010, 22:51   #540
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Код:
  Try // попытаться
    // проверить первый байт на число (перечисление все кодов команд)
  Except // при ошибке
    // выкинуть пользователя
  end;
Проверку делать только на сервере и в процедуре ServerTimerTimer перед
Код:
// Получим код комманды, длину строки
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17