|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.09.2008, 21:45 | #61 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Ну, можно и так, хотя если используется процедура ShowColorMassage({текст},{индекс}), то достаточно написать так:
Код:
Если же у вас нет специальной процедуры, тогда перед каждым выводом сообщения, нужно прописать параметры шрифта и присвоить текст в текущую ячейку: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
22.11.2008, 14:28 | #62 |
Регистрация: 20.12.2007
Сообщений: 3
|
Проблема при многочисленных подключениях
Здравствуйте !
Большое спасибо за Ваш проект и предоставленные исходники. Так как изучать работу сокетов начал именно на этих исходниках, хочу спросить совета как решить возникшую проблему. Я добавил автоконнект клиентов через 3 секунды после потери связи с сервером. Проверяю всё на одном компе локально. Клиентов запускаю батником 7-10 штук. Имя генерируется рандомоно, длиной 6 символов. Проблема состоит в том, что при отключении сервера и повторном включении, один раз на 5-7 включений, при опросе имён клиентов происходит сбой. Я в мемо записываю все передачи и приём, и вот что происходит не правильно: 1) Сервер регистрирует многочисленные подключения. 2) Он рассылает 1 для опроса имени в каждый канал. 3) Клиент получает 1 и отправляет свой ник. Размер строки 7 символов. (Я убрал шрифты и цвета). 4) Сервер проверяет каналы и получает ответы. В идеале должно придти 7 отправленных символов. Проверяю так же с помощью ServerSocket.Socket.Connections[i-1].ReceiveLength, но на некоторых каналах длинна полученной строки удвоена. Причём ReceiveLength тоже указывает на удвоеный размер приёма. С чем может быть связана эта проблема ? При 30 подключениях ошибка выскакивает постоянно, пакеты приходят не только удвоенные, но и утроенные. |
22.11.2008, 15:03 | #63 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
ToBad, у TCP/IP есть одна особенность, если вы подряд отправите три пакета, это не означает, что они придут как три пакета и обработаются каждый в отдельности, ...для снижения нагрузки на сеть эти три пакета могут объединиться в один, без нашего вмешательства, и соответственно, размер пакета будет в три раза больше, и обработаются только первые несколько байт по шаблону, остальные будут либо проигнорированы, либо сочтутся за команду и выскочит ошибка, если программист этого не предусмотрел. В своем примере я вообще ничего не предусматривал, поскольку это дело уже каждого лично, гораздо большую пользу имеет сам способ организации связи. Решение тут простое, введите в шаблон команды после байта индекса - байт длины пакета, напишите процедуру, которая принимает на обработку пакеты любой длины и вырезает из них отдельные команды. Принцип примерно такой:
1) передаем пакет; 2) смотрим первый байт, определяем команду; 3) смотрим следующий байт, определяем длину части; 4) вырезаем команду из пакета, обрабатываем; 5) если весь пакет больше длины вырезанной части, переходим к этой части и выполняем с пункта 2. Обратите внимание, что при подключении нового пользователя идет опрос всех уже присутствующих. Здесь нужно строго следить, чтобы прием и отправка по одному взятому каналу выполнялась в нужной последовательности.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
22.11.2008, 15:16 | #64 |
Регистрация: 20.12.2007
Сообщений: 3
|
Beermonza, спасибо за быстрый ответ !
Насчёт длины пакета - так и сделаю, но странно то, что неправильные данные просто дублируются 2-3 раза. То есть сервер посылает 3 запроса на Comp1-Copm3, а в ответ получает тоже 3 пакета, но такого вида: 1Comp1 1Comp21Comp2 1Comp3 Попробую передавать длину, это должно помочь. Ещё хотел бы спросить, какие неприятности могут ожидать при большом числе клиентов, например 150-200. У длины передаваемой строки есть ограничение в 255 символов ? Можно ли избежать опроса всех пользователей при коннекте или дисконнекте нового ? Есть ли возможность формировать и изменять юзер лист при срабатывании ServerSocketClientConnect и ServerSocketClientDisconnect ? Как это лучше реализовать ? Я в сокетах очень большой новичёк... |
22.11.2008, 15:55 | #65 | |||||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 22.11.2008 в 15:58. |
|||||
23.11.2008, 00:06 | #66 |
Регистрация: 20.12.2007
Сообщений: 3
|
Beermonza большое спасибо за подсказки !
|
16.03.2009, 16:23 | #67 |
Новичок
Джуниор
Регистрация: 16.03.2009
Сообщений: 1
|
подскажите пожалуйста, а как сделать чтобы если клиент запустился раньше сервера (или разрыв связи), то происходило переподключение к серверу? а то клиент тупо висит пока не нажмешь отключиться и снова подключиться.
Заранее благодарен |
18.03.2009, 13:06 | #68 |
Регистрация: 21.11.2008
Сообщений: 7
|
Раздельные клиент-сервер
Привет всем! Отличная прога! Спасибо!
Но у меня возник вопросик как разнести сервер и клиент по разным приложениям?! Напишите пожалуйста принцип. Заранее спасибо! |
19.03.2009, 16:15 | #69 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Режим ожидания сервера
Цитата:
Код:
Код:
Код:
Код:
Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
19.03.2009, 16:20 | #70 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Принцип клиент-сервера
Достаточно просто. Программа и сейчас является клиент-серверной. Вам не нужны будут коды управления клиентским сокетом и некоторые его клавиши. Нужно сделать копию с архива, зайти в среду Delphi и вырезать все, что связано с ClientSocket для серверной части, и в другом проекте вырезать все, что связано с ServerSocket для клиентской части.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обновление в блоге - Создание клиент-сервера | 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 |