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

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

TServerSocket & ClientSocket [D6, WinXP]


rrew ©   (2004-02-26 20:32:00) 

Дан сервер, с N подключенными клиентами.
Как можно отослать пределенному клиенту текст, не
используя Connections[index].SendText, так как индекс
клиента все время меняется(при подключении, или отключении других клиентов).


TButton   (2004-03-03 06:16:00) [1]

2Gvammer
http://www.delphimaster.ru/articles/cgi.html


Gvammer   (2004-03-03 03:03:00) [2]

Мне-то как раз надо, чтобы программа работала без клиентской части. Нужно получить запрос, посланный с веб-страницы, обработать его и послать обратно инфу из базы данных в зависимости от самого запроса.


Digitman   (2004-03-02 16:24:00) [3]


> Gvammer   (02.03.04 16:12) [14]


TServerSocket - чистой воды транспортный компонент
ни о каких "XML, Pearl, Java, НА ЧЕМ-НИБУДЬ" он знать не знает
но зато предоставляет тебе возможность обработать события OnClientRead/Write, в которых ты имеешь возможность принять некие данные, проанализировать их формат на соответствие тому иди иному тебя интересующему яз.соглашению, интерпретировать нужным образом эти данные и передать результат интрерпретации в нужном тебе формате тому, кто из запрашивал


Gvammer   (2004-03-02 16:12:00) [4]

Подскажите, plz, как сделать так, чтобы ServerSocket обробатывал запрос из интернета. На XML, Pearl, Java, НА ЧЕМ-НИБУДЬ!!!!


Digitman   (2004-03-02 11:46:00) [5]


> rrew ©   (01.03.04 20:09) [11]
> Я нашел решение проблемы:
> создаю тип MySock: TCustomWinSocket,
> когда надо отправить  соощение делаю так
> MySock.Accept(handle);// handle клиента которому надо отправить
> msg
> MySock.SendText(msg);


плохое решение

следом за событием OnAccept() обязательнопоследует событие OnClientWrite(), в котором 2-м параметром будет фигурировать Socket: TCustomWinSocket.. вот его-то send-методы и следует вызывать .. в обработчике того же события


serg128   (2004-03-02 09:57:00) [6]

while(IPstr.Length())
   {
       tmpIP = IPstr.SubString(1, InpStr.Pos(";")-1);
       IPstr.Delete(1, InpStr.Pos(";"));
       TClientSocket *ClientSocket = new TClientSocket(this);
       ClientSocket->Port = 6002;
       ClientSocket->Address = tmpIP;
       ClientSocket->Active = true;
       ClientSocket->Open();
       Application->ProcessMessages();
       ClientSocket->Socket->SendText(txt);
       ClientSocket->Active = false;
       ClientSocket->Close();
       delete ClientSocket;
   }


rrew   (2004-03-01 20:09:00) [7]

Я нашел решение проблемы:
создаю тип MySock: TCustomWinSocket,
когда надо отправить  соощение делаю так
MySock.Accept(handle);// handle клиента которому надо отправить msg
MySock.SendText(msg);


TButton   (2004-02-29 17:19:00) [8]

ну у меня был глобальный массив юзеров, каждый юзер представлен record'ом, при логине в его record вписывается handle его сокета, при необходимости вызывается SendToUser(VNUM: integer; s: string) процедура вытаскивает record юзера № VNUM, читает handle его сокета, перебирает connections и шлет текст.


rrew   (2004-02-29 00:08:00) [9]

Почти так, это как??? Если можно поподробнее


TButton   (2004-02-28 14:43:00) [10]

а чем плох перебор?
для прикола возьми TickCount перед перебором и после, глянь разницу.

или если неудобно каждый раз перебирать - мастрячишь функцию HandleToNum или IPToNum, а еще лучше - SendToIP и SendToHandle
я так делал... т.е. почти так...


TButton   (2004-02-28 13:38:00) [11]

боюсь что никак, кроме как через OnRead OnWrite


rrew   (2004-02-27 22:16:00) [12]

Оригинально!!! До этого я и  сам догадался!!! Но мне нада зделать так что бы не было перебора типа
if serversocket1.socket.connections[i].handle=h; then.....
мне надо типа того
 serversocket1.socket...[handle]...SendText
Как это можно осуществить


TButton   (2004-02-27 18:54:00) [13]


...
var
i:integer;
s:string;
begin
for i:=0 to serversocket1.socket.activeconnections-1 do begin
if serversocket1.socket.connections[i].handle=h; then
serversocket1.socket.connection[i].sendtext('your text');
end;
end;
...


h это handle нужно клиента, можно запоминать в онконнекте, или при логине, или как там у тебя...


rrew   (2004-02-27 18:47:00) [14]

Пример с ИП я уже пробовал, возникает проблема, если на одной машине запущено 2 клиента. Я пробовал с SocketHandle, только не могу разобраться как можно послать так сообщение.


Polevi   (2004-02-27 09:24:00) [15]

Socket в OnClientRead, OnClientWrite


Android   (2004-02-26 21:07:00) [16]

s - это ip нужного компа


Android   (2004-02-26 21:06:00) [17]

Попробуй по ip адресу типа:

...
var
i:integer;
s:string;
begin
for i:=0 to serversocket1.socket.activeconnections-1 do begin
if serversocket1.socket.connections[i].remoteadress=s; then
serversocket1.socket.connection[i].sendtext('your text');
end;
end;
...


Наверх

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