Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

UDP пакет   Найти похожие ветки 

 
RealGanj   (2006-06-12 14:22) [0]

Я аматор в этих вопросах, потому не мудить сторого за вопрос.
Хочу написать свой чат. С использованием ServerSocket и ClientSocket нужно создавать сервер. А как сделать, чтобы при запуске программы если запущен экземпляр программы в сети, присоединяться к нему.


 
Whitevova ©   (2006-06-12 14:56) [1]

Я предлагаю тебе два решения:

1. Напиши простенький серв. Или добавь в клиенты ServerSocket: например для общения с конкретными людьми. Т.е. клиент будет выступать и в роли сервера и в роли коннектера. Сделай меню создать сервер - принажатии на него ты будешь сервером, а чтобы люди могли к тебе коонект - им надо в  каком-либо месте написать например: /connect ip сервера.

2. А то что ты хочешь - это сложно, но всё же можно... Добавь в клиенты, также как и в первом решении по ServerSocket. Сделай так, чтобы при входе в программу твой клиент сканировал сеть (ну определенный порт конечно (по которому у тебя будут передаваться данные)). Если найден сервер (порт открыт (получилось приконнектиться)), то добавляем ip сервера в какаой-либо список. И так далее. Потом выводим список найденных серверов. Далее двойным кликом на имени сервера из списка коннектимся к нему. Вот и всё.

P.S. Незнаю, понял ли ты. Но ели понял и есть вопросы - спрашивай.


 
RealGanj   (2006-06-12 15:17) [2]

Первый способ я сделал.
Я хочу чтобы в подсети был один сервер (при этом сервер может быть на любой машине).
Принцып понятен. Нужно проверять весь диапазон IP в подсети? Ка это сделать? Я думаю, этот процесс будет долгим.


 
Whitevova ©   (2006-06-12 18:26) [3]


> Принцып понятен. Нужно проверять весь диапазон IP в подсети?
>  Ка это сделать? Я думаю, этот процесс будет долгим


Допустим. Тогда:

(обший вид)

1. Создаешь программу клиент\сервер (2 в 1)
2. При запуске программа сканирует все компьютеры в сети на наличие открытого порта (допустим 7777).

а) Ищем всё компьютеры в сети
б) Проверяем ClientSocket на возможность присоединение к каждому из компьютеров.

3. Как только найден компьютер сервер (с открытым портом). Добавляем его в список серверов (пока не визуальный). Продолжаем поиск.
4. Сканирование закончено. Выводим форму на которой находится ListBox, элементами которого являются ip-адреса или имена компьютеров найденных серверов. А также три кнопки "Присоединиться", "Создать новый ..." и "Выход".
5. Действие пользователя:
а) Либо двойным кликом на имени (ip-сервера),либо нажатием кнопки "Присоединиться" (при выделенном элементе списка), пользователь присоединяется к серверу. Там он общается с теми людьми, кто к нему присоединен.

б) Может нажать на кнопку "Создать новый ...". И создать свой сервер. К которому смогут коннектиться другие.

в) Может поспотреть, что ни одного сервера в сети нет и выйти. Просто нажав "Выход".

6. Макияж делай сам. Сделай различный обмен между серверами. Может что-то дельное и выдет. Смотри - всё в твоих руках :)

P. S. Кто бы мне помог?!!!


 
Whitevova ©   (2006-06-12 18:37) [4]

Насчёт времени: нет - не очень долго. Если у тебя в сети конечно не миллионы компов. Если пара тысяч, то даже при небольшой скорости соединения не больше 10 секунд. Хотя и ошибаться могу. Но не 10 минут и час это точно. Тут весь мир просканируешь :))


 
Сергей М. ©   (2006-06-13 08:44) [5]


> RealGanj   (12.06.06 15:17) [2]


> Нужно проверять весь диапазон IP в подсети?


Не нужно.

Клиент при старте делает UDPbroadcast-запрос "Сервер, ты где ?", сервер слушает такие запросы и отвечает вопрошающим клиентам "Я здесь, по такому-то адресу на таком-то порту"


 
RealGanj   (2006-06-13 13:28) [6]


> Клиент при старте делает UDPbroadcast-запрос "Сервер, ты
> где ?", сервер слушает такие запросы и отвечает вопрошающим
> клиентам "Я здесь, по такому-то адресу на таком-то порту"

Можно код этой процедуры?

И как в тексте анимированые смайлы отображатть?


 
Сергей М. ©   (2006-06-13 15:38) [7]


> Можно код этой процедуры?
>


Нельзя.
По кр.мере до тех пор, пока ты не определишься с компонентами, использующими UDP-протокол.


> как в тексте анимированые смайлы отображатть?


Это не имеет никакого отношения к теме вопроса.


 
medved_68 ©   (2006-06-14 08:34) [8]


>  А как сделать, чтобы при запуске программы если запущен
> экземпляр программы в сети, присоединяться к нему.


> > Принцып понятен. Нужно проверять весь диапазон IP в подсети?

А зачем???? Если ты пишешь пару прог типа клиент-сервер выдели им определенный диапазон портов а IP адрес сервера пусть забивает клиент при запуске на своей машине клиентского приложения. По крайней мере в различных приложениях такого типа так и сделано (кроме игровых). Просто такие приложения ориентированы не только на IP адрес, но и на сетевое имя компа т. е. пользователь сам вводит либо 1 либо 2 и жмет коннект


 
RealGanj   (2006-06-25 15:20) [9]


> Нельзя.
> По кр.мере до тех пор, пока ты не определишься с компонентами,
>  использующими UDP-протокол

С каким компонентом предоставите-и на том буду рад!


 
Сергей М. ©   (2006-06-25 19:16) [10]


> RealGanj   (25.06.06 15:20) [9]


А не лопнешь от удовольствия ?
Еще и компоненты тебе выбирай)
А ты будешь при этом сидеть, в потолок поплевывать да ждать готовенькое...

Сам-то телодвижения какие-нть планируешь ?


 
RealGanj   (2006-06-26 12:35) [11]

Все, разобрался!



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.07 c
2-1161675853
kirillrepin
2006-10-24 11:44
2006.11.12
TStringList


2-1161885095
Alral
2006-10-26 21:51
2006.11.12
Array [ 0..225] of Char, String


15-1161934086
Некто
2006-10-27 11:28
2006.11.12
Посоветуйте антивирус


1-1159564738
Piterim
2006-09-30 01:18
2006.11.12
Вызов Си-функции из dll


2-1161698169
Серый
2006-10-24 17:56
2006.11.12
Memo поле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский