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

Вниз

Пишу свой чат. Помогите!   Найти похожие ветки 

 
Mr.Bean   (2003-08-16 16:51) [0]

Помогите, кто может! Я пишу чат с помощью сокетов. Как можно сделать рассылку сервером списка абонентов, если их имена содержатся в ListBox"е? И вообще, если кто хочет принять участие в создании чата - пишите мне на e-mail. Заранее большое спасибо.


 
SergP   (2003-08-17 15:02) [1]

Так а в чем именно проблема?
Рассылай listbox.Items.Text всем подключеным клиентам.

Ну например так:

var
a:string;
i:integer;
begin
a:="#1"+listbox1.Items.Text;
// #1 - некая строка позволяющая клиенту
// отличить список абонентов от других данных

for i:=0 to serversocket1.Socket.ActiveConnections-1 do
begin
ServerSocket1.Socket.Connections[i].SendText(a);
end;
end.

Не знаю насколько это правильно. Я сам с сокетами начал работать несколько дней назад (чаты не писал). Но думаю что я бы сделал так или подобным образом. Если конечно я правильно понял суть проблемы....


 
Mr.Bean   (2003-08-17 16:29) [2]

Я тоже так сделал. Но я сделал это в таймере. При попытке клиента присоединиться к серверу выдает сообщение об ошибке. А суть проблемы ты понял правильно.


 
Mr.Bean   (2003-08-17 16:55) [3]

Нет, извиняюсь. Эта проблема решена. Я делал чуть-чуть по другому
var
i,k:integer;
c:string;
begin
if serversocket1.Active=false then exit;
k:=0;
c:="add!";
while listbox1.Items[k]<>"" do
c:=c+listbox1.Items[k]+"!";
for i:=0 to serversocket1.socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText(c);
Теперь другая проблема. При создании формы вызывается событие clientsocket1.open. Для возможности изменения IP сервера я делаю код:
clientsocket1.Close;
clientsocket1.host:=form2.edit2.text;
clientsocket1.port:=StrToInt(form2.Edit3.text);
clientsocket1.open
И программа выдает сообщение "Can"t change value while socket is active". Как от этого избавиться?


 
SergP   (2003-08-17 17:55) [4]

Вообще-то пусть мастера ответят. А то возможно я что-нить не правильно скажу. Но мне кажется что после

clientsocket1.Close;

Нужно подождать пока clientsocket отконектится.

Поэкспериментируй с ожиданием пока не установится в false Clientsocket1.active или Clientsocket.socket.connected
Насчет того ждать первое или второе - поэкспериментируй сам.


 
Mr.Bean   (2003-08-17 19:49) [5]

Поэкспериментировал. Оказалось, что clientsocket1.active всегда true. Решил убрать clientsocket1.open при создании формы. И помогло! :) Спасибо за идею!



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

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

Наверх




Память: 0.45 MB
Время: 0.008 c
1-40361
west
2003-10-01 16:04
2003.10.13
HelpME


1-40445
Goga
2003-10-02 15:24
2003.10.13
Кто знает как работать с LDAPом?


1-40375
anton_private
2003-10-01 13:09
2003.10.13
Нужна помощь!!!!!!


3-40319
Alexia2
2003-09-24 09:50
2003.10.13
Что за зверь эта транзакция?


11-40323
balbes
2003-02-02 17:45
2003.10.13
Try Accept B delphi6





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