Форум: "Сети";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизTServerSocket в консольном приложении (типа, без форм) Найти похожие ветки
← →
maxistent © (2004-09-20 17:28) [0]Уважаемые Мастера и все кто здесь! Не погёте ли мне с вопросом: надо написать консольное приложение с использованием TServerSocket (коннектить, читать клиентов, писать им). Надо бы мне прогу без форм, но с TServerSocket. Как это замудрить? Можь у кого код (или его часть) есть, а?
← →
Defunct © (2004-09-20 18:15) [1]а в чем сложность?
Server := TServerSocker.Create(Nil);
← →
VMcL © (2004-09-20 19:10) [2]>>Defunct © (20.09.04 18:15) [1]
Сложность в том, что если сокет в не блокирующем режиме, то нужно самостоятельно организовать цикл выборки сообщений.
← →
maxistent © (2004-09-20 19:25) [3]
> Server := TServerSocker.Create(Nil);
Да, сложность не в этом. Сложность в том, что я не знаю, как узнавать о его коннекте/дисконнекте с клиентами, принимать, обрабатывать и отправлять сообщения :) ВОТ В ЧЁМ СЛОЖНОСТЬ!
← →
VMcL © (2004-09-20 19:39) [4]>>maxistent © (20.09.04 19:25) [3]
Server.OnConnect := ...
P.S. Учи матчасть. Без неё ой как тяжко.
← →
maxistent © (2004-09-21 17:05) [5]
> Server.OnConnect := ...
А дальше-то что?.. Может кусочек сорца есть, а? Буду рад...
← →
VMcL © (2004-09-21 17:34) [6]>>maxistent © (21.09.04 17:05) [5]
Вроде, как-то так:program Test;
uses
Windows, ...;
type
TWorkClass = class(TObject)
private
FFlag: Boolean;
FServer: TServerSocket;
procedure ServerConnect(Sender: TObject);
// ...
public
constructor Create;
destructor Destroy; override;
// ...
property Flag: Boolean read FFlag;
end;
constructor TWorkClass.Create;
begin
inherited Create;
FServer := TServerSocket.Create(nil);
FServer.OnConnect := ServerConnect; // не помню, может event по-другому называется
end;
// ...
// Где-то тут происходит установка флага Flag в True
destructor TWorkClass.Destroy;
begin
FServer.Free;
inherited Destroy;
end;
begin
with TWorkClass.Create do
while not Flag do
Sleep(1);
end.
← →
maxistent © (2004-09-22 11:52) [7]Не, блин. Что-то не так...
← →
maxistent © (2004-09-22 11:57) [8]... Люди!!! Плиз, хелп!..
← →
Digitman © (2004-09-22 12:25) [9]
> надо написать консольное приложение с использованием TServerSocket
вот зачем тебе консоль ? непонятно ... можешь объяснить ?
сделай обычное приложение и не мучайся
← →
Polevi © (2004-09-23 12:54) [10]>VMcL © (21.09.04 17:34) [6]
ну и где цикл выборки сообщений
← →
VMcL © (2004-09-23 14:31) [11]>>Polevi © (23.09.04 12:54) [10]
Забыл. Тем более в [6] я отвечал на [5]. Там про цикл ничего не было :-)
← →
maxistent © (2004-09-23 18:41) [12]
> Digitman © (22.09.04 12:25) [9]
надо мне прогу написать, чтоб маленькая была и сервер на ней был. Сервер-то создать не проблема, проблема изложена выше [3]. Как быть?
← →
VMcL © (2004-09-23 18:57) [13]>>maxistent © (23.09.04 18:41) [12]
Можно написать без использования VCL, то бишь "чиста на WinAPI".
← →
maxistent © (2004-09-24 13:36) [14]дык этога я и не могу!!! Как это замудрить???
← →
Digitman © (2004-09-24 14:22) [15]
> надо мне прогу написать, чтоб маленькая была и сервер на
> ней был
не будет она "маленькая"
в случае Д5 класс TServerSocket использует модуль Forms
так что хоть с формой хоть без формы, а размер менее 300кб ты не получишь
пиши на WinsockAPI
← →
Polevi © (2004-09-24 14:39) [16]лучше на .NET, там еще меньше получится
← →
Григорьев Антон © (2004-09-24 15:42) [17]
> maxistent © (24.09.04 13:36) [14]
> дык этога я и не могу!!! Как это замудрить???
Начни вот отсюда: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021
← →
kaZaNoVa © (2004-09-24 16:55) [18]2ALL к вопросу размера программы ...
На чисто-апи, прога - файл сервер у меня была 10 кб (Delphi7) - имхо очень даже маленькая ;)))))))
//функции приём/передача/запуск/удаление файлов
клиент к нему 14 кб :) (GUI)
← →
kaZaNoVa © (2004-09-24 16:56) [19]maxistent © (24.09.04 13:36) [14]
Digitman правильно сказал - консоль не нужна ;)
← →
Digitman © (2004-09-24 17:10) [20]угу ...
подозреваю, что автор строгает трояна..
и горе-Делфи-троянописатель к своему стыду совершенно не ориентируется, что, как, где и почему происходит в Делфи
← →
kaZaNoVa © (2004-09-24 17:14) [21]Digitman © (24.09.04 17:10) [20]
если так, то пусть бросит это ;))
// главное, чтобы он ветку про скрытие процесса не нашёл %))
а то такое напишет ... :)
← →
kaZaNoVa © (2004-09-24 17:16) [22]Polevi © (24.09.04 14:39) [16]
тогда уж Runtime Packages будет очень небольшая ;)
← →
maxistent © (2004-09-27 13:33) [23]злые вы! уйду я от вас...
← →
maxistent © (2004-09-27 13:44) [24]не, люди! так же нельзя! эт ж издевательство! кто магёт по теме ответить?
← →
Digitman © (2004-09-27 13:47) [25]
> кто магёт по теме ответить?
по теме-то как раз совершенно непонятно, какое отношение имеет наличие или отсутствие "формы" как таковой к использованию класса TServerSocket как такового
← →
maxistent © (2004-09-28 13:24) [26]эт уж точно издевательство!!! КОНКРЕТНЫЙ ВОПРОС: КАК НАПИСАТЬ КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ c TServerSocket, ЧТОБЫ ПРОГА МОГЛА ХОТЯ БЫ ПОКАЗАТЬ MessageBox С АДРЕСОМ КЛИЕНТА ИЛИ ПРИНЯТЫМ ТЕКСТОМ? Я деляю что-то вроде:
uses SockComp;{или типа того...}
var
s1:TServerSocket;
begin
s1:=TServerSocket.Create(nil);
s1.port:=1234;
s1.Active:=true;
{потом ещё что-то было - не помню...}
{здесь ставлю какой-нить цикл и сервак пашет...}
end.
клиенты-то коннектются, а сервер об етом не знаеть!!! Как быть? или не быть, а? Вы ж, блин, мастера или нет? Подмогните :) ...
← →
maxistent © (2004-09-28 13:26) [27]эт уж точно издевательство!!! КОНКРЕТНЫЙ ВОПРОС: КАК НАПИСАТЬ КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ c TServerSocket, ЧТОБЫ ПРОГА МОГЛА ХОТЯ БЫ ПОКАЗАТЬ MessageBox С АДРЕСОМ КЛИЕНТА ИЛИ ПРИНЯТЫМ ТЕКСТОМ? Я деляю что-то вроде:
uses SockComp;{или типа того...}
var
s1:TServerSocket;
begin
s1:=TServerSocket.Create(nil);
s1.port:=1234;
s1.Active:=true;
{потом ещё что-то было - не помню...}
{здесь ставлю какой-нить цикл и сервак пашет...}
end.
клиенты-то коннектются, а сервер об етом не знаеть!!! Как быть? или не быть, а? Вы ж, блин, мастера или нет? Подмогните :) ...
← →
maxistent © (2004-09-28 13:29) [28]оп!.. ещё и глюк какой-то хапнул :) хе... не уж то я два разочка-то клинул <Добавить>? гм... а два и не получилось бы...
← →
Digitman © (2004-09-28 13:43) [29]
> КАК НАПИСАТЬ
как, как) ... чего ты раскричался-то ? кАком кверху ! ... известно как - головой и руками ...
> ЧТОБЫ ПРОГА МОГЛА ХОТЯ БЫ ПОКАЗАТЬ MessageBox
да нашута, скажи на милость, нужна консоль, если ты все равно намерен GUI использовать ? в виде хотя бы того же MessageBox ? ведь весь смысл использования консоли в этом случае пропадает !
> клиенты-то коннектются, а сервер об етом не знаеть
> здесь ставлю какой-нить цикл и сервак пашет
вот ты сам себе на вопрос и ответил - цикл нужен
тебе об этом еще Polevi © (23.09.04 12:54) [10] сказал
а цикл-то этот прост до безобразия
var
Msg: TMsg;
while GetMessage(Msg, 0, 0, 0) do
DispatchMessage(Msg);
только вот консоль твоя на польз.ввод при этом реагировать не будет, да и сам цикл будет бесконечным
решение здесь тоже простое - при старте консоли создать доп.трэд, который, собственно, и будет создавать/уничтожать серв.компонент и работать с его событиями (цикл этот и в случае доп.трэда обязателен к реализации), после старта трэда "висеть", например, на readln, чтобы по команде юзера можно было терминировать созданный трэд (и, соотв-но, завершить работу серв.компонента)
← →
Polevi © (2004-09-28 17:01) [30]>Digitman © (28.09.04 13:43) [29]
думаю его пользовательский ввод с консоли мало волнует :)
← →
Digitman © (2004-09-29 08:19) [31]
> Polevi © (28.09.04 17:01) [30]
виропись, хочешь сказать ?)
← →
kaZaNoVa © (2004-09-29 13:26) [32]Digitman © (29.09.04 8:19) [31]
нет .. так вирусы не пишут ...
- имхо что-то трояноподобное ..
← →
maxistent © (2004-09-30 17:43) [33]Да Вы чё, с дубу рухнули?! Какие виропись трояноподобная?! Люди! Если здесь таковые имеются! Будьте человеками, а!..
← →
kaZaNoVa © (2004-09-30 19:02) [34]maxistent © (30.09.04 17:43) [33]
;))))))))))))
← →
Digitman © (2004-10-01 08:52) [35]
> maxistent © (30.09.04 17:43) [33]
ты не флуди, а вникни в [29]
← →
maxistent © (2004-10-01 11:08) [36]вникнул. какие сообщения принимать от GetMessage? ИМЕННО ЭТОГО-ТО Я И НЕ ЗНАЮ!!! :)
← →
Digitman © (2004-10-01 11:19) [37]
> maxistent © (01.10.04 11:08) [36]
в дан.случае - никакие.
если того не требуют доп.условия в постановке задачи, то это не твоя забота - Dispatchmessage() самостоятельно "раздаст" сообщения окнам-адресатам
← →
maxistent © (2004-10-01 16:50) [38]мля! накаких окнОВ-адресатов нет! Моя задача написать прогу, которая САМА должна определить, что законнектился ли клиент. Затем передать пару-тройку стрингов (типа, команд) и, наконец, потом "сидеть" и читать то, что приходит от клиента. В зависимости от принятого текста выполнять к.л. действия.
← →
maxistent © (2004-10-01 16:53) [39]...пардон за ошибку во втором слове: НИКАКИХ и слово ЧТО перед ЗАКОННЕКТИЛСЯ :)
← →
Digitman © (2004-10-01 17:17) [40]
> maxistent © (01.10.04 16:50) [38]
ты чего размлякался, а ?! Детский сад ?
ты думать головой намерен вообще или нет ? или не головой ? или не думать ?
Мухой в scktcomp.pas !
Читать текст класса TServerSocket до полного просветления !
Убедиться, что в ходе исполнения метода TServerSocket.Open создается окно , принимающее нотификационные сообщения гнезда о событиях транспорта !
Все !
Работай самостоятельно ! Голова дана не для пожирания пива !
Страницы: 1 2 вся ветка
Форум: "Сети";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.037 c