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

Вниз

Написание локального чата...   Найти похожие ветки 

 
Freeze   (2003-04-04 12:06) [0]

Подскажите пожалуйсто, как работают все чаты, которые работают без сервера. Ну вот например: запускаешь чат, а тебе уже сразу показываются ники кто сидит в этом чате. Помогите плизззз


 
savva   (2003-04-04 12:42) [1]

где ты такие видел?


 
Clickmaker   (2003-04-04 14:15) [2]

Если ты имеешь в виду локально-сетевые трещалки типа LanTalk, то они как правило работают через виндозные mailslot"ы по протоколу UDP (без гарантии доставки). Там нет понятий клиент и сервер, все равны


 
AllDontFire   (2003-04-04 16:56) [3]

Например, На компоненте TUDP:
При запуске чата (в Onshow) посылаешь Broadcast-сообщение (Всем сразу)
begin ...
Udp1.Activate;
Udp1.Options.Broadcast:=True;
Udp1.RemoteHost:="255.255.255.255";
...
end;


TForm1.UDP1Ready(Sender: TObject);
begin
Udp1.SendText("V"+Edit_Name.Text) // "V"- вход (можно любую букву)
end;


Если в чате уже кто-то сидит, он получит это сообщение:
procedure TForm1.UDP1DataReceived(Sender:TComponent;const Data:String;FromIP:String;Port:Integer);
begin
...
Udp1.RemoteHost:=FromIP;//кому слать
If M[1]="V"Then Begin
ListBox1.Add(FromIP);//добавил тебя в список
Udp1.sendText("ok"+Edit_Name.Text);//ответ на "V"
end;
...
end;


Теперь ты получаешь его "ок" и добавляешь в свой список.

Вообще-то, лучше не просто добавлять в список,
а создавать программно CheckBox"ы:
Procedure TForm1.CreateCb(i:Byte;Caption:String);
Var T:TCheckBox;
begin
t:=TCheckBox.Create(Form1);t.Name:="Cb"+IntToStr(Ord(AIP[i]));
t.Height:=17;t.Width:=130;t.Top:=19+20*i;t.Left:=40;
t.Parent:=Panel2;t.Caption:=Caption;t.Enabled:=False
end;


а потом работать через TComponent:
CompR:=FindComponent("Cb"+ip);
TcheckBox(CompR).Enabled:=...



 
AllDontFire   (2003-04-04 17:01) [4]

Извини, забыл в UDP1DataReceived

M:=Data


 
AlexMax   (2003-04-04 18:21) [5]

Всё просто. Если тебе необходим именно локальный чат, то проще всего создать MailSlot. Смотри функции по MailSlot"ам. Например CreateMailSlot. А список пользователей получай функцией WNetEnumResource. Это самый простой способ написать локальный чат без использования компонент UDP, TCP и Client/Server Socket. А так в стандартных дельфовских демках-примера есть пара чатов написанных на вышеприведённых компонентах.


 
Дефлоратор   (2003-04-09 16:55) [6]

я тоже когда-то страдал с сокетами, а потом мы запарились ждать, пока включат комп с сервером и переделал на УДП
УДП - улез для локальных чатов, жаль только не для всех локалок подходит, но для большинства катит.
Получилось неплохо, если хотите, посмотрите на
http://slim2.pisem.net/chat.zip



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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
14-35012
vidiv
2003-05-27 01:20
2003.06.12
Кто придумал smtp? и как настроить MDaemon, чтобы ...(не влезает)


6-34955
daan_m
2003-04-11 06:32
2003.06.12
Мне требуется узнать на отправляющей стороне сколько уже отправл


14-35025
ilyasim
2003-05-26 06:00
2003.06.12
Access Violation


3-34738
Юлия
2003-05-23 18:18
2003.06.12
Выпадающий список в DBGrid


14-35035
Vlad Oshin
2003-05-26 10:54
2003.06.12
Да что такое...когда надо что-то делать - хочется делать со-





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский