Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

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

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 16.07.2007, 22:10   #1
NecroSlider
Пользователь
 
Регистрация: 19.02.2007
Сообщений: 24
По умолчанию Вопрос про Socket-Ы

Учусь работать с компонентами ClientSocket и ServerSocket. Решил сделать небольшой чат, чтобы понять их работу. Столкнулся с проблемой и не знаю как ее решить. На одном компьютере запускаем сервер на другом соответственно клиент, сообщения между ними передаются без проблем, но мне нужно создать как бы несколько каналов:
1)по одному передается информация написанная юзером
2)сервер рассылает юзерам информацию о том сколько всего юзеров в системе
3)сервер рассылает юзерам никнеймы всех юзеров в сети
Подскажите пожалуйста как это реализовать
P.S.Привожу исходник того что уже есть
http://tempage.msk.ru/Socket_Chat.rar
Поле где написано "Всего подключено 0" должно передаваться клиентам в зависимости от его изменения, т.е. если кто-то подключился или вышел.
В поле "None" должны быть никнеймы юзеров приконнетившихся к серверу, оно так дже должно отправляться всем пользователям.
NecroSlider вне форума   Ответить с цитированием
Старый 17.07.2007, 09:06   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

папка demos в папке delphi
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума   Ответить с цитированием
Старый 17.07.2007, 14:02   #3
NecroSlider
Пользователь
 
Регистрация: 19.02.2007
Сообщений: 24
По умолчанию

В папке demos есть чат, но он реализован через другие компоненты. И там отсылаются только данные набитые в строке сообщений, а мне нужно переслать несколько видов данных.
Например как отправить текст набитый юзером и присвоенный к message
следом отправить текст о кол-ве пользователей присвоенный к nombers
и следом текст ником юзеров присвоенный к users
Проблема в том что я не знаю как отправить эти значения чтобы клиент распознал их и вбил users в поле для ников юзеров, nombers вбил в поле кол-ва юзеров, а message вбил в поле чата.
Если я отправляю сообщение то клиент его пишет в поле для чата, т.е. не получается разбить один пакет данных на несколько и распознать их.
Все это нужно реализовать через компоненты Socket server и Socket client.
Думаю это не сложно и если это так прошу привести код распознования разных переменных.

P.S. понимаю что все вышесказанное звучит как-то дико, так что приведу более простой пример:
Есть сервер и клиент, сервер расчитывает три переменные X,Y,Z. После расчета он отправляет их клиенту, клиент в свою оччередь записывает их в 3 поля на форме для X,Y,Z после чего отправляет ответ серверу что данные получены и обработаны, после чего сервер расчитывает их заного и повторяет процесс. Вопрос как послать 3 координаты чтобы клиент распознал их как 3 различных сообщения (т.е. увидел значение X, значение Y и значение Z) и совершил действия прописанные для каждой переменной.

Последний раз редактировалось NecroSlider; 17.07.2007 в 14:09.
NecroSlider вне форума   Ответить с цитированием
Старый 20.07.2007, 16:56   #4
X=Vitamin=X
Пользователь
 
Аватар для X=Vitamin=X
 
Регистрация: 18.11.2006
Сообщений: 32
По умолчанию

Хм... довольно знакомая ситуация
Я тоже когда-то писал чат на TServerSocket и TClientSocket.
Могу тебе предло жить следующий вариант:
1. придумай свою систему команд, т.е. когда с сервера отсылаеш сообщение, то к началу этого сообщения приклеиваешь команду и отсылаешь (например <users>nic1|nic2|nic3...). Соответственно клиенту нужно делать проверку на наличие команды и правильно обрабатывать сообщения от сервера. Таким образом все сводится к банальной работе со строками
2. Что косается соединений то у TServerSocket есть свойство Conections, тоесть у каждого подключившегося клиента уже есть свой номер, кроме того и кол-во клиентов, а ето очень упрощает жизнь

P.S. Если хочешь могу скинуть исходник своей чатовки, поковыряешь.
Незнание - рабство, знание - свобода ! ! !
X=Vitamin=X вне форума   Ответить с цитированием
Старый 20.07.2007, 20:40   #5
NecroSlider
Пользователь
 
Регистрация: 19.02.2007
Сообщений: 24
По умолчанию

Цитата:
Сообщение от X=Vitamin=X Посмотреть сообщение
Хм... довольно знакомая ситуация
Я тоже когда-то писал чат на TServerSocket и TClientSocket.
Могу тебе предло жить следующий вариант:
1. придумай свою систему команд, т.е. когда с сервера отсылаеш сообщение, то к началу этого сообщения приклеиваешь команду и отсылаешь (например <users>nic1|nic2|nic3...). Соответственно клиенту нужно делать проверку на наличие команды и правильно обрабатывать сообщения от сервера. Таким образом все сводится к банальной работе со строками
2. Что косается соединений то у TServerSocket есть свойство Conections, тоесть у каждого подключившегося клиента уже есть свой номер, кроме того и кол-во клиентов, а ето очень упрощает жизнь

P.S. Если хочешь могу скинуть исходник своей чатовки, поковыряешь.
Тогда возникает вопрос как определить что строка содержит команду?
Если несложно то скинь, пожалуйста либо на мыло s15218@yandex.ru
или тут ссылку дай где скачать.
NecroSlider вне форума   Ответить с цитированием
Старый 02.08.2007, 19:14   #6
X=Vitamin=X
Пользователь
 
Аватар для X=Vitamin=X
 
Регистрация: 18.11.2006
Сообщений: 32
По умолчанию

Просто проверяй ее наличие, я делал так:

TmpMsg:=copy(msg,1,pos(msg,#1));
case TmpMsg of
'usrlst' :begin
.....
end;
'cmnd1' :begin
.....
end;
'cmndN' :begin
.......
end
else Memo1.lines.add(msg)
end;

где, msg - это сообщение от сервера
#1 - я использовал как разделитель между командой и текстом

З.Ы. Писал по памяти, извини если где чего нетак написал, главное идея!!!
ПРимер скину на почту!!!
Незнание - рабство, знание - свобода ! ! !
X=Vitamin=X вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UDP & Socket Shouldercannon Работа с сетью в Delphi 14 13.10.2008 17:23
Socket Get Editor Работа с сетью в Delphi 7 22.04.2008 05:48
Socket vs Stream JoanM Работа с сетью в Delphi 1 01.04.2008 10:10
QIP - Socket is not connected Viteef Софт 4 14.11.2007 07:17
Socket Delphi 7 merax Работа с сетью в Delphi 1 09.02.2007 11:32