|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.07.2007, 22:10 | #1 |
Пользователь
Регистрация: 19.02.2007
Сообщений: 24
|
Вопрос про Socket-Ы
Учусь работать с компонентами ClientSocket и ServerSocket. Решил сделать небольшой чат, чтобы понять их работу. Столкнулся с проблемой и не знаю как ее решить. На одном компьютере запускаем сервер на другом соответственно клиент, сообщения между ними передаются без проблем, но мне нужно создать как бы несколько каналов:
1)по одному передается информация написанная юзером 2)сервер рассылает юзерам информацию о том сколько всего юзеров в системе 3)сервер рассылает юзерам никнеймы всех юзеров в сети Подскажите пожалуйста как это реализовать P.S.Привожу исходник того что уже есть http://tempage.msk.ru/Socket_Chat.rar Поле где написано "Всего подключено 0" должно передаваться клиентам в зависимости от его изменения, т.е. если кто-то подключился или вышел. В поле "None" должны быть никнеймы юзеров приконнетившихся к серверу, оно так дже должно отправляться всем пользователям. |
17.07.2007, 09:06 | #2 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
папка demos в папке delphi
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
17.07.2007, 14:02 | #3 |
Пользователь
Регистрация: 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. |
20.07.2007, 16:56 | #4 |
Пользователь
Регистрация: 18.11.2006
Сообщений: 32
|
Хм... довольно знакомая ситуация
Я тоже когда-то писал чат на TServerSocket и TClientSocket. Могу тебе предло жить следующий вариант: 1. придумай свою систему команд, т.е. когда с сервера отсылаеш сообщение, то к началу этого сообщения приклеиваешь команду и отсылаешь (например <users>nic1|nic2|nic3...). Соответственно клиенту нужно делать проверку на наличие команды и правильно обрабатывать сообщения от сервера. Таким образом все сводится к банальной работе со строками 2. Что косается соединений то у TServerSocket есть свойство Conections, тоесть у каждого подключившегося клиента уже есть свой номер, кроме того и кол-во клиентов, а ето очень упрощает жизнь P.S. Если хочешь могу скинуть исходник своей чатовки, поковыряешь.
Незнание - рабство, знание - свобода ! ! !
|
20.07.2007, 20:40 | #5 | |
Пользователь
Регистрация: 19.02.2007
Сообщений: 24
|
Цитата:
Если несложно то скинь, пожалуйста либо на мыло s15218@yandex.ru или тут ссылку дай где скачать. |
|
02.08.2007, 19:14 | #6 |
Пользователь
Регистрация: 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 - я использовал как разделитель между командой и текстом З.Ы. Писал по памяти, извини если где чего нетак написал, главное идея!!! ПРимер скину на почту!!!
Незнание - рабство, знание - свобода ! ! !
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 06:17 |
Socket Delphi 7 | merax | Работа с сетью в Delphi | 1 | 09.02.2007 10:32 |