![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;
...