![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TSocketClient и TSocketServer работа с потоками
Vladimir © (2009-03-01 10:27:00)Доброго времени суток всем! Заранее извиняюсь если данная тема уже поднималась, но в поиске ответа на свой вопрос я так и не нашел. Требуется написать клиент-серверное приложение. В данный момент написал пробные клиент и сервер на SocketClient и SocketServer соответсвенно работающие в синхронном режиме. Подскажите пожалуйста каким образом организовать их работу в асинхронном режиме, чтобы сервер одновременно обслуживал несколько клиентов! И ещё есть такая проблема при посылке текста через SendText на сервер приходят иероглифы, причем это только на Windows Vista, на Windows XP все работало нормально. Использую Delphi 2009. Из-за чего это может быть? Заранее спасибо.
Empleado (2009-03-03 12:29:00) [41]
> А как можно с этим разобраться? чтоб текст нормальный приходил?
Например, отправлять Уникод и принимать Уникод.
Прочитать в хелпе об использовании Unicode в D2009. Там подробно написано, с примерами, как работать со строками.
Не использовать SendText, a SendBuf, например, либо TWinSocketStream.Read/Write.
При чтении из сокета, преобразовывать полученное в Unicode. Например с помощью класса TEncoding.Unicode.GetString [или же StringOf в случае telnet].
Сергей М. (2009-03-03 12:27:00) [42]
> Vladimir (03.03.09 12:09) [9]
Что ты послал, то и получишь.
Данные при их транспортировке под управлением TCP доставляются в гарантированно неизменном виде.
Vladimir (2009-03-03 12:09:00) [43]
> Из-за Уникод?
А как можно с этим разобраться? чтоб текст нормальный приходил?
Empleado (2009-03-02 12:32:00) [44]
> И из-за чего может быть проблема с SendText?
Из-за Уникод?
Slym (2009-03-02 05:32:00) [45]зачем далеко ходить? на этом форуме недалече второй страницы
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1227604925&n=4
Сергей М. (2009-03-01 13:14:00) [46]Вот не ахти какой, но достаточно показательный пример:
http://www.delphisources.ru/pages/faq/base/tserversocket.html
Vladimir (2009-03-01 13:07:00) [47]Сергей, видимо мы с вами друг друга немного не понимаем. Вы не могли бы выложить код самого простого многопоточного сервера и сделать пометки в тех местах где поток создаеться, где можно проделывать какие-либо действия с клиентом(принимать от него данные, посылать ему данные) и где поток уничтожаеться. Может быть тогда у меня получиться разобраться. И из-за чего может быть проблема с SendText?
Сергей М. (2009-03-01 12:53:00) [48]
> Но я и спрашиваю каким образом организовать работу сервера
> в режиме stThreadBlocking
Это и есть синхронныйрежим. Только не самого компонента, а сокетов, которые он создает и использует в ходе работы.
> для каждого клиента надо создавать отдельный поток, а когда
> клиент отключиться его надо уничтожать
TServerSocket все это делает сам
Vladimir (2009-03-01 12:48:00) [49]Спасибо конечно)) Но я и спрашиваю каким образом организовать работу сервера в режиме stThreadBlocking. Ведь для каждого клиента надо создавать отдельный поток, а когда клиент отключиться его надо уничтожать и т.д.
Сергей М. (2009-03-01 12:42:00) [50]Режим работы ClientSocket м.б. любым и никаким образом не каксается режима работы ServerSocket
Сергей М. (2009-03-01 12:30:00) [51]SocketServer в любомрежиме способен обслуживать более одного клиента.
В режиме stNonBlocking обслуживание всех клиентов последовательное в одном потоке, в режиме stThreadBlocking каждое активное кл.соединение ужеобслуживается в отдельном потоке.