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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2008, 15:34   #11
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Радость

Цитата:
Сообщение от InseR Посмотреть сообщение
Ваш способ неработает,при компиляции выдает ошибку,да и при написании строки userList.Selected.index тоже.Я использую не ListView,а ListBox,возможно ошибка из-за этого?
Да, ошибка именно в этом. В имени объектов лучше всегда оставлять его исходное имя с добавлением перед ним или после него ключевого. Например:
ListView1 - UserListView
ListBox1 - UserListBox

Попробуйте заменить код на UserList.ItemIndex
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.04.2008, 22:20   #12
DeCoder
Пользователь
 
Регистрация: 17.04.2008
Сообщений: 22
По умолчанию

Помогите: я немного усовершенствовал чат(дабавил работу с лок. сетью); но только теперь понял, что не знаю, какой ip писать для интернет-чата. Что он(ip) должен содержать(если для лок. сети это, к примеру 192.168.0.255) и как с ним работать.
Просто в основном, при тестах возникала ошибка 10060 или 10061 и все мои попытки разобраться с этим ни привели не к чему.
DeCoder вне форума Ответить с цитированием
Старый 18.04.2008, 00:14   #13
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если вы в локальной сети, вы вводите локальный адрес 192.168.*.* , если нужно через Интернет, то в то же поле вводите внешний IP-адрес, ...это тот, что вам дает провайдер, когда вы выходите в интернет, ...смотрите адрес в свойствах сети.
Если ваш провайдер скрывает внешний IP другим (шлюзы, маршрутизаторы), то вы сможете быть только клиентом, ...сервер должен иметь прямой Интернет IP-адрес.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 18.04.2008, 09:07   #14
DeCoder
Пользователь
 
Регистрация: 17.04.2008
Сообщений: 22
По умолчанию

Как реализовать бан по ip? То есть, нужен файл с которым будет сверяться сервер(находится-ли данный ip в бане, и на сколько). Есть проблема: не знаю, как узнать Ip того, кто прислал сообщений).

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

Далее: как можно "пометить" чат(дать ему название на сервере)? т.е. может быть много серверов в сети и чтоб всех их можно было найти через клиент(вывести список серверов и их ip).

Последний раз редактировалось DeCoder; 18.04.2008 в 10:17.
DeCoder вне форума Ответить с цитированием
Старый 18.04.2008, 15:20   #15
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Модернизация...

Цитата:
Как реализовать бан по ip? То есть, нужен файл с которым будет сверяться сервер(находится-ли данный ip в бане, и на сколько). Есть проблема: не знаю, как узнать Ip того, кто прислал сообщений).
Именно так. Создайте файл или БД, как вым удобно, ...проверяйте содержимое записей при каждом подключении пользователей.
IP пользователя можно узнать так ServerSocket.Socket.Connections[i].RemoteAddress; , блокировать канал можно через ServerSocket.Socket.Connections[i].Lock; , обратная ServerSocket.Socket.Connections[i].Unlock;, или вообще принудительно закрыть канал ServerSocket.Socket.Connections[i].Close;

Цитата:
Как создать защищенный паролем канал? т.е. чтоб на сервер можно было ходить только с паролем. Точнее, чтоб если на сервере стоит допуск юзера через пароль, то появлялось окошко с сообщением о вводе пароля, а если нет, то соотв., не появлялось.
Защищенным может быть разрешение пользоваться каналом. TCP/IP для работы и передачи каких-либо данных требует наличие канала, так что вам нужно будет установить канал, т.е. подключиться к серверу, ...после установки канала нужно чтобы сервер проверил записи в БД, если там есть пометка "вход с паролем", то сервер должен отправить по каналу команду, которую клиентское приложение понимает как "вывести окошко ввода пароля" (если пометки нет, то просто разрешить пользоваться каналом). Затем по этому же каналу пароль отправляется на сервер, дальше обработка и действие: отправить сообщение "неверный пароль", "забанить" или "обрубить провода" )

Цитата:
... как можно "пометить" чат(дать ему название на сервере)? т.е. может быть много серверов в сети и чтоб всех их можно было найти через клиент(вывести список серверов и их ip).
Тут задача сложная для компонентов TServerCocket и TClientSocket ИМХО трудно реализуемая, ...придется использовать бродкаст со стороны клиента на адрес 255.255.255.255 отправлять ключевое слово, чтобы запущенные сервера приняв пакет отправили по определенному IP пославшего свой IP-адрес сервера, и какие-либо дополнительные данные, которые записываются клиентом в список. Но это все уже к другому компоненту UdpSocket.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 21.04.2008, 10:25   #16
DeCoder
Пользователь
 
Регистрация: 17.04.2008
Сообщений: 22
По умолчанию

Спасибо за помошь!
Можно-ли сделать, чтобы ip клиента было видно серверу в самом чате возле его ника? Пробовал - получилось не то - ip видно тогда всем пользователям. т.е. необходимо, чтобы сервер при получении сообщения определял ip того, от кого оно пришло. В локальном чате всё гораздо проще...

Бан... "ServerSocket.Socket.Connection s[i].Lock;" - куда писать ip? Не знаю, может, я чего не понимаю... Как происходит сам бан?
Из этой записи я понял, что закрывается подключение. Но как клиент определит, кому именно послано такое сообщение?

Хм... А что, если упостить задачу: клиент подключается к серверу, а тот, в свою очередь, отправляет клиенту данные о дуступных серверах чата(cамо ip чата(юзер не будет видеть его), название, тип доступа(пароль и т.п.).
Тогда прийдётся изменить немного сам чат. Т.е. при подключении на данный адрес, сервер отправляет данные о комнатах, ноходящихся на нём.

Как "обрезать" сообщения? т.е. "enter" на конце и пробелы вначале. А то пытабсь сделать отправку сообщения по нажатию "enter" и происходит печатание этой кнопки в тексте.
Код:
if (TextEdit.Text<>'') then SendBtn.Enabled:=true
else SendBtn.Enabled:=false;
if SendBtn.Enabled=true then
if key=13 then
begin

SendBtn.Click;
 end;
так же нужно, чтоб если вначале текста есть пробелы, ло после них нет текста, то SendBtn.Enabled:=false. Как это сделать?

З.Ы.(1) Я тут подумал... Может быть ведь много разных сервов с разными адресами... Что если сделать так: создать единый главный сервер, на котором будет БД, в которую будет вноситься информация о создании нового меньшего сервера, т.е. во всех сервер-клиентах будет указан ip, на который отправлять информацию о состоянии сервера(активен/нет, сколько человек на сервере, какие разделы/комнаты существуют и т.п.).
Т.е. клиенту не нужно будет самому "сканировать" сеть в поисках доступных серверов, это будет делать главный сервер. Клиенту останется только подключиться к нему и узнать необходимую информацию.

З.Ы.(2) Траблы с SendText'ом. Происходит изменения свойства caption формы - это возможно исправить? На сервере caption формы вообще пропадает.
Я заметил, что и в исходниках статьи тоже самое с заголовком.

Последний раз редактировалось DeCoder; 21.04.2008 в 14:37. Причина: Новый вопрос
DeCoder вне форума Ответить с цитированием
Старый 21.04.2008, 14:50   #17
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Комментарии...

Цитата:
Сообщение от DeCoder Посмотреть сообщение
... А что, если упростить задачу: клиент подключается к серверу, а тот, в свою очередь, отправляет клиенту данные о дуступных серверах чата...
Дело все в том, что клиенту совершенно должно быть безразлично где сервер и какой у него IP. Пользователь не должен задумываться над способом подключения, за него это должна выполнять продуманная система алгоритмов.
А если главный сервер случайно или по техническим причинам окажется отключенным, а прочие сервера будут работать? ...не сложно понять, что никакой информации в этом случае пользователь не получит, равно как и возможность пользоваться программой.

Цитата:
Сообщение от DeCoder
Как "обрезать" сообщения? т.е. "enter" на конце и пробелы вначале. А то пытаюсь сделать отправку сообщения по нажатию "enter" и происходит печатание этой кнопки в тексте.
Что-то у вас не то с параметрами, Edit не записывает клавиши управления. Вместо key=13 используйте key=VK_RETURN, ...если проблема не уйдет, пересоздайте Edit или покажите процедуру SendBtn.Click

Цитата:
Сообщение от DeCoder
З.Ы.(2) Траблы с SendText'ом. Происходит изменения свойства caption формы - это возможно исправить? На сервере caption формы вообще пропадает.
Я заметил, что и в исходниках статьи тоже самое с заголовком.
Внимание этому не уделялось по простой причине, ...при проверке и налаживании шапка формы просто служит индикатором, все пакеты и их содержимое прекрасно видно.
Используйте восстановление заголовка (назначьте сново заголовок) в конце таймера сканирования у сервера и чтения пакета у клиента.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 21.04.2008, 16:02   #18
DeCoder
Пользователь
 
Регистрация: 17.04.2008
Сообщений: 22
По умолчанию

Цитата:
Цитата:
:Сообщение от DeCoder
Как "обрезать" сообщения? т.е. "enter" на конце и пробелы вначале. А то пытаюсь сделать отправку сообщения по нажатию "enter" и происходит печатание этой кнопки в тексте.
Что-то у вас не то с параметрами, Edit не записывает клавиши управления. Вместо key=13 используйте key=VK_RETURN, ...если проблема не уйдет, пересоздайте Edit или покажите процедуру SendBtn.Click
у меня RichEdit везде. и ChatMemo и TextEdit.

Цитата:
Бан... "ServerSocket.Socket.Connection s[i].Lock;" - куда писать ip? Не знаю, может, я чего не понимаю... Как происходит сам бан?
Из этой записи я понял, что закрывается подключение. Но как клиент определит, кому именно послано такое сообщение?
-так и не ответили на мой вопрос.

Цитата:
Используйте восстановление заголовка (назначьте сново заголовок) в конце таймера сканирования у сервера и чтения пакета у клиента.
-Не годится. Тогда у клиента на медленных машинах мигает заголовок формы каждый раз, когда приходит сообщение.
Я не знаю... Можт блокировать заголовок от изменения как-нибудь?)) А то юзерам, думаю, такая дискотека ни к чему.)

Последний раз редактировалось DeCoder; 21.04.2008 в 16:12.
DeCoder вне форума Ответить с цитированием
Старый 21.04.2008, 17:30   #19
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
у меня RichEdit везде...
Хм..., вообще не вижу надобности его применения в качестве поля ввода текста, ИМХО лишнее.

Цитата:
-так и не ответили на мой вопрос.
Отвечал, когда двух абзацей еще не было )

Запись ServerSocket.Socket.Connections[i].Lock; говорит о том, что канал под номером i будет заблокирован, и клиент находящийся на этом канале не сможет отправлять по нему данные. Куда вписать IP? ...у вас же есть список пользователей, вы просто выбираете пользователя и записываете в БД, что этот пользователь должен быть заблокирован. Теперь, что происходит при подключении этого клиента. Он заходит, ему дается канал (очередной i), пока он неизвестный, ...вводит свой ник и пароль, ...сервер регистрирует его как пользователя (записывает с список присутствующих), ... проверяет БД, если этот пользователь должен быть блокирован, то сервер смотрит список, находит ник, узнает канал, отправляет пользователю соответствующее сообщение, блокирует канал, делает пометку в списке (меняет картинку на другую), отсылает всем остальным индекс новой картинки "пользователь в блоке".
Вы блокируете зарегистрированного пользователя, блочить IP бесполезно, поскольку он может меняться очень часто, достаточно переподключить Интернет.


Цитата:
Цитата:
Цитата:
Используйте восстановление заголовка (назначьте сново заголовок) в конце таймера сканирования у сервера и чтения пакета у клиента.
-Не годится. Тогда у клиента на медленных машинах мигает заголовок формы каждый раз, когда приходит сообщение.
Я не знаю... Можт блокировать заголовок от изменения как-нибудь?)) А то юзерам, думаю, такая дискотека ни к чему.)
Посмотрите настройки таймера, Interval отвечает за скорость обработки данных (такт), уменьшайте его и ничего мерцать не должно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 25.04.2008, 07:07   #20
InseR
Пользователь
 
Регистрация: 01.06.2007
Сообщений: 59
По умолчанию

Подскажите пожалуйста как получить индекс выделяемого элемента в ListBox
InseR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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