Форум: "Сети";
Текущий архив: 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