Конференция "Сети" » TIdCmdTCPServer
 
  • Zalm © (31.08.09 18:27) [20]
    угу, если бы я писал через TServerSocket  я бы не задавал таких тупых вопросов.

    Ну вот разве что это что-то дельное AContext.Connection.Socket.Binding.Handle;
    и адрес там можно узнать.
    Тока пользы никакой для меня, в Server.Contexts я так и не нашел куда можно этот значение приспособить...
    Тока в Server.Bindings.BindingByHandle(HND).SendTo(); можно пихнуть... и то не получилось:(

    а примеры на 10-Ю версию не могу найти((
  • Медвежонок Пятачок © (31.08.09 18:29) [21]
    Дядя, в метод OnExecute сервера тебе передано нечто.
    Нечто это бывает разным в разных версиях инди.
    Вот это нечто и есть то что тебе надо. А так же все что вложено в этот тип.
  • Медвежонок Пятачок © (31.08.09 18:32) [22]
    для десятки это будет так:
    IdCmdTCPServer1Execute(AContext: TIdContext);

    вот этот контекст и есть то, что чего ты весь день ищешь
  • Zalm © (31.08.09 19:01) [23]
    а мне Execute не надо, я там ничего не пишу, всё только в командным обработчиках. А через OnConnect просто хотел записывать данные в массив о подключившихся что бы их как-то различать потом.
    только вот как записать в массив что-то конкретное из события OnConnect я так и енп онял... Не подскажете?
  • Сергей М. © (31.08.09 20:50) [24]

    > мне Execute не надо, я там ничего не пишу


    А куда ты денешься с подводной лодки ?
    Придется писать.


    > как записать в массив что-то конкретное из


    Не надо ничего никуда "пихать" - все уже давным-давно "напихано".

    В списке Connections.LockList каждый элемент - это TIdPeerThread.
    У TIdPeerThread есть объектное св-во Connection: TIdSocketHandle
    У объекта TIdSocketHandle есть св-ва PeerIP и PeerPort - адрес и порт клиента. Эта комбинация всегда уникальна, и этого достаточно для однозначной идентификации клиента.
    Кр.того, у объекта TIdSocketHandle есть send/recv-методы для коммуникации с клиентом.
  • Zalm © (31.08.09 22:55) [25]
    эх так и знал что вся подстава в этом LockList ((( я его открыл посмотрел и забил, ибо не показалось что как-то с сервером связано.

    А зачем обязательно в Execute писать?

    Спасибо большое, щас пойду пробовать.
  • Zalm © (01.09.09 03:35) [26]
    Я наверное что-то не понимаю... но у меня нельзя так сделать из любого места. Вот допустим я знаю порт и адрес, как вы сказали,
    Потом отсылаю в процедуру, адрес и порт, а когда хочу написать в процедуре Server.Connections то такого нет, есть только Server.Contexts.LockList а в лок-листе нет опять же свойства ни сокетов ни Connections...  опять я чего-то не понял? :(
  • Медвежонок Пятачок © (01.09.09 07:58) [27]
    ты сначала вот над этим порассуждай:
    присоединился клиент и висит на сервер. затем он отправляет на сервер команду.
    серверу в это время приходит в голову разослать всем клиентам сообщение и он это делает.
    а клиент в это время команду уже отправил и ждет свой законный ответ именно на нее.
    вместо этого он получает кусок байтов, которые он интерпретирует как ответ на команду.

    а на самом деле там у тебя там дрова лежат.

    ps
    для обмена между сервером и клиентом нужно стрго следовать какому-то стандартному протоколу, либо придумать свой протокол и следовать ему.
  • Сергей М. © (01.09.09 10:05) [28]

    > зачем обязательно в Execute писать?


    А ты и в Execute не напишешь.
    Execute вызывается только если у сервера список CommandHandlers пуст, а он у тебя заведомо не пуст, ибо нафих тогда нужен TidCmdTCPServer ?
    Ты пойми главное - TidCmdTCPServer не предназначен для выкрутасов задуманного тобой вида, он заточен и призван работать в режиме "команда клиента -> ответ сервера как результат выполнения этой команды". На то как раз ComandHandler'ы у него и существуют.
  • Zalm © (01.09.09 21:42) [29]
    А какие у меня выкрутасы?) вобще задача у меня такая, нужен сервер который будет как бы точкой переброса, короче надо что бы он мог создавать "пары" из соединений, и транслировать между ними (между членами в паре) трафик, в данном случае любой текст, который любой член этой пары захочет послать. Например один клиент передает команду на сервер, сервер принимает и смотрит от кого пришло и пересылает это тому кто находится в паре с этим клиентом. Да, такая спицифическая система)
    Тогда что вы бы посоветовали какой компонент использовать?
    Подскажите пожалуйста как лучше можно было бы сделать.
  • Сергей М. © (01.09.09 22:10) [30]

    > как лучше можно было бы сделать


    Пока не будет внятного разработанного тобой протокола информационного обмена, рассуждения на тему "лучше-хуже" лишены смысла.
  • Zalm © (01.09.09 23:13) [31]
    эх.. а конкретнее?
    что сложного сделать сервер котоый будет просто текст перебрасывать?
    ему же ничего не надо трогать, получил, передал дальше, и всё.
    Как я понял уже через TIdCmdTCPServer это не очень удобно делать.
  • Сергей М. © (02.09.09 09:11) [32]

    > что сложного сделать сервер котоый будет просто текст перебрасывать?


    А нашиша тогда выбрал TIdCmdTCPServer, если требуется "просто текст перебрасывать" ? Почекму не TIdTCPServer ? И чем так уж не угодил тот же самый TServerSocket, тем более что там для тебя "проще всё, ну или понятней" ?


    > а конкретнее?


    Вот сейчас мы с тобой "разговариваем" при использовании протокола информационного обмена HTTP.
    А ты разработал свой протокол ?)
  • Zalm © (02.09.09 17:20) [33]
    Я знаю что такое HTTP и как работает...
    Если это можно назвать "разработал", то можно и так, но только не для обмена с сервером "пересылки", а с конечными точками.
    TServerSocket мне не нравится так придется все потоки в ручную писать и много вобще придется писать.
    А на TIdTCPServer думаю проще будет, он и потоки сам создает же, и всё лучше... так что попробую через него.

    Еще вопрос такой мб сторонний немного, к этой теме относится только тем что тоже работа с сетью. Можно Как-то закосить сервер под сервер аси? что бы например конектится не к login.icq.com, а например к моему сервру, и что бы он клиенту контакт лист выдал и мог читать что этот клиент отправит на сервер? и не более. Больше ничего серверу не требуется кроме как выдать конаткт лист с заранее вписанными на сервер контактами, и читать что этим контактам будет слать клиент. То есть есть один сервер и один клиент.. ну думаю вы поняли задачу..)
  • Сергей М. © (02.09.09 17:31) [34]

    > но только не для обмена с сервером "пересылки", а с конечными
    > точками


    А "конечные точки" у тебя между собой напрямую не взаимодействуют.
    Они же у тебя "разговаривают" через твой сервер-посредник, так что и речь может идти не иначе как о протоколе инф.обмена между клиентами и сервером-посредником.


    > TServerSocket мне не нравится так придется все потоки в
    > ручную писать


    В смысле ?


    > Можно Как-то закосить сервер под сервер аси?


    Можно.
  • Медвежонок Пятачок © (02.09.09 18:35) [35]
    что сложного сделать сервер котоый будет просто текст перебрасывать?

    не сложно. сложно написать клиента который понял бы все перебрасываемое ему.
    хотя тоже не сложно (если самому себе не рыть ям)
  • Zalm © (02.09.09 18:52) [36]
    я знаю как всё написать, просто пока не определился точно к компонентом.

    Читая протокол я не понял какие команды сначала надо слать с сервера клиенту когда он подключится тока... я подключался с телефона к серверу, он подключается и молчит и чего-то ждет... где можно прочитать коротко какая последовательность компанд друг другу дожна быть что бы они подключились? Подскажете?
  • Сергей М. © (02.09.09 22:18) [37]

    > Читая протокол


    Как можно читать то, что ты еще не написал ?)


    > какие команды сначала надо слать с сервера клиенту


    А что, клиент нуждается в каких-то командах ?
    Нахрена, спрашивается, тогда нужен сервер, если клиенты готовы исполнять его прихоти ?)


    > какая последовательность компанд друг другу дожна быть что
    > бы они подключились?


    Никакая.
    Ты же сам утверждаешь, что якобы "подключался с телефона к серверу", при этом ни ты серверу, ни сервер тебе не посылал никаких "команд")
    Чудеса ?)
  • Anatoly Podgoretsky © (03.09.09 09:10) [38]

    > Ну дык еще и исходники всегда перед носом)

    Ну ты и садист.
  • Zalm © (06.09.09 05:14) [39]
    ох... вернулся к этой тему.. что-то я никак не пойму:( у меня не получается никак отправить кому-то что-то за пределы его потока.

    можете пожалуйста если вам не сложно показать кусок конкретного кода как отправить кому-то что-то не из его потока?
    Я был бы очень благодарен
 
Конференция "Сети" » TIdCmdTCPServer
Есть новые Нет новых   [134437   +29][b:0][p:0.001]