Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сервер. отправка всем клиентам [D7, WinXP]


lena19 ©   (2004-04-05 08:51:00) 

Всем привет
Народ подскажите как отправить
С компонента serversocket данные всем клиентам ?


Digitman   (2004-04-18 11:49:00) [1]


> почему не просто length(Msg) ?


потому что автор никак не оговорил свой фактический ПИО

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


SergP   (2004-04-18 11:06:00) [2]

>Adil   (17.04.04 22:31)

ИМХО не пройдет. При отконективании или приконективании нового клиента номера подключений могут поменяться. Поэтому кто-то из клиентов может получить 2 раза одно и то-же, а кто-то нифига...

Хотя вообще-то хз.


Adil   (2004-04-17 22:31:00) [3]

Можно делать так:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
inc(x);
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
dec(x);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=0 to x-1 do
ServerSocket1.Socket.Connections[i].SendText('Salam')

end;

Это самый примитивный вариант.


Piter   (2004-04-17 14:35:00) [4]

MasterDenis (15.04.04 22:19) [6]
А если в момент перебора от 0 до X одно из соединений закрылось? Исключение обрабатывать?


Можно использовать for ... downto
Хотя тоже есть свои проблемы...

Digitman (16.04.04 10:25) [8]
Length(msg) + 1


А почему не просто length(Msg) ?


Digitman   (2004-04-16 13:39:00) [5]

бывает) ... тяпница ж сегодня !)


Rouse_   (2004-04-16 13:32:00) [6]

Да действительно, что-то уже к концу недели мозги кипят :)


Digitman   (2004-04-16 11:34:00) [7]


> Rouse


по сути, использование здесь стрим-объекта и метода SendStream позволяет оч просто организовать индивидуальную для каждого клиента буферизацию передаваемых ему в неблок.режиме данных и легко избежать геморроя с необходимостью явной обработки OnClientWrite - в случае со стрим-передачей компонент сам обработает все FD_WRITE-события, передавая стрим кусок за куском, пока весь стрим не будет передан


Digitman   (2004-04-16 11:29:00) [8]


> Rouse_


ни в коем случае !

безусловное разрушение ms должно происходить явно только в случае возникновения искл.ситуации

если же таковая не возникла в ходе исполнения SendStream, то стрим-объект будет автоматически разрушен в любом случае передан ли ms успешно и полностью или при очередной pending-операции произошел неожиданный отказ трансп.канала


Rouse_   (2004-04-16 11:21:00) [9]

> [8] Digitman ©   (16.04.04 10:25)
Вероятно finally а не except?


Digitman   (2004-04-16 10:25:00) [10]

var
 ms: TMemorystream;
 msg: String;
...

msg := 'Сообщение';

with ServerSocket.Socket do
for i:= 0 to ActiveConnections - 1 do
begin
  ms := TMemoryStream.Create;
  try    
    ms.WriteBuffer(PChar(msg)^, Length(msg) + 1);
    ms.Position := 0;
    Connections[i].SendStream(ms);    
  except
    ms.Free;
  end;
end;


Rouse_   (2004-04-15 22:29:00) [11]

Любое исключение необходимо обрабатывать...


MasterDenis   (2004-04-15 22:19:00) [12]

А если в момент перебора от 0 до X одно из соединений закрылось? Исключение обрабатывать?
Не праздное любопытство - сам голову над этим ломаю.


Digitman   (2004-04-05 11:55:00) [13]

x = ServerSocket.Socket.ActiveConnections - 1


Verg   (2004-04-05 11:52:00) [14]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1079380703&n=4

Читай последние две строки в сообщении №14


lena19   (2004-04-05 11:49:00) [15]

for n:=0 to x do .....connecktions[n].send...
а чему равен x


lena19   (2004-04-05 11:45:00) [16]

for n:=0 to x do .....connecktions[n].send...
а чему равен x


Anatoly Podgoretsky   (2004-04-05 09:31:00) [17]

Перебрать всех клиентов в цикле


Наверх

Титульная страница Поиск, карта сайта Написать письмо