Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-40470
GreySerg
2003-09-30 20:44
2003.10.13
Как в ListView при редактировании запретить действие ShortCutов ?


1-40495
Pavels
2003-10-02 11:19
2003.10.13
проблема с загрузкой nodeValue в DOMDocument


3-40297
Mamed
2003-09-24 10:52
2003.10.13
Что вы подумете об етом?


4-40745
Ghost
2003-08-05 11:14
2003.10.13
Возможно ли встроить окно чужого приложения в своё ?


14-40675
Владислав
2003-09-18 12:57
2003.10.13
Нужна информация по СУБД.