Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

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 создается окно , принимающее нотификационные сообщения гнезда о событиях транспорта !

Все !
Работай самостоятельно ! Голова дана не для пожирания пива !


 
kaZaNoVa ©   (2004-10-01 22:44) [41]

maxistent ©   (01.10.04 16:53) [39]
ну, как, работает ?


 
Verg ©   (2004-10-02 00:23) [42]

Все, я устал...


 
VMcL ©   (2004-10-02 05:23) [43]

>>maxistent ©  (01.10.04 16:50) [38]

Ты либо глупец, либо...
На этом мысль останавливается.


 
DHDD   (2004-10-02 05:48) [44]

Лучше не используй T...Socket. Он параллельный, нужно писать алгоритм проверки CRC, и то он поможет ~ на 60%. Лучше используй Indy: TidSocket,TidClient - он последовательный с Thread"ом, ошибок не бывает. (Indy - Internet Direct)
Для начала возьми пример в Demos для Indy, отладь на работоспособность, а потом локализуй до проекта без unit"ов.
Если будут проблемы локализации - задавай новый вопрос: этот тебе уже понаотвечали.


 
maxistent ©   (2004-10-02 09:18) [45]

короче, оффтоп... :)


 
kaZaNoVa ©   (2004-10-02 19:13) [46]

maxistent ©   (02.10.04 9:18) [45]
ага .. Гы .. :)


 
Polevi ©   (2004-10-02 20:57) [47]

>DHDD   (02.10.04 05:48) [44]
ты бы лучше жевал


 
VMcL ©   (2004-10-03 13:09) [48]

>>maxistent ©  (02.10.04 09:18) [45]

Я вот не могу понять, изучить матчасть тебе родители запрещают?


 
maxistent ©   (2004-10-04 19:09) [49]

пойду-ка я застрелюсь наверное... :(


 
maxistent ©   (2004-10-05 09:46) [50]

нет, не пойду :) Я так просто не сдамся! Если Вы такие МАСТЕРА, что не можете ответить по-человечьи на вопрос, а только можете критиковать и давать ненужные советы, то лучше сидите и молчите! ...Блин, ведь должен же быть здесь чел знающий, а!...


 
Digitman ©   (2004-10-05 10:51) [51]

ну точно - "детский сад" ... "блин" да "мля" сплошь и рядом ..

ЧТО тебе непонятно ? уже все разжевали тебе !
создаешь wrapper-объект, который будет обрабатывать события
создаешь компонент TServerSocket
настраиваешь его св-ва Address/Port
назначаешь обработчики событий, ссылаясь на wrapper-объект
активируешь TServerSocket
входишь в цикл ожидания/выборки/диспетчеризации сообщений (уже приведен выше)

все !!

ну что, что еще непонятно ?


 
maxistent ©   (2004-10-05 16:52) [52]

не знаю я как создать wrapper-object. Как назначать обработчики. Знал бы - не спрашивал :(


 
Digitman ©   (2004-10-05 17:07) [53]


> не знаю я как создать wrapper-object


декларируешь любой свой класс, например

TSomeWrapper = class
 ..
procedure DoOnClientConnect(Sender: TObject; Socket: TCustomWinSocket);
 ..
end;

создаешь его экз-р

MyWrapper := TSomeWrapper.Create;

назначаешь обработчик события

MyServerSocket.OnClientConnect := MyWrapper.DoOnConnect;

вуаля !


 
maxistent ©   (2004-10-05 17:23) [54]

ПАСИБА-А-А-А!!! ВОТ ЭТО-ТО МНЕ И НАДО БЫЛО!!! НАКОНЕЦ-ТО ДОЖДАЛСЯ ОТВЕТА!!! С меня пиво... :)


 
Луарвик   (2004-10-06 00:36) [55]

Кстати, я тож заметил, что критиковать они любят... Вон тут кроме Digitman и еще пары челов никто по делу не базарит... Но эт к слову.


 
Polevi ©   (2004-10-06 11:17) [56]

в натуре


 
VMcL ©   (2004-10-07 12:36) [57]

>>Луарвик  (06.10.04 00:36) [55]

>Кстати, я тож заметил, что критиковать они любят..

Может потому что есть за что?
http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
maxistent ©   (2004-10-08 11:09) [58]

не обижайся, но может у тебя ещё найдётся ссылка на то, как правильно сходить в туалет?! или какой рукой вилку держать? :)


 
kaZaNoVa ©   (2004-10-08 22:26) [59]

maxistent ©   (08.10.04 11:09) [58]
ну ты дал ..  :)
ЛОЛ ;)


 
VMcL ©   (2004-10-08 23:26) [60]

>>maxistent ©  (08.10.04 11:09) [58]

http://tinyurl.com/3lan3


 
kaZaNoVa ©   (2004-10-09 10:02) [61]

VMcL ©   (08.10.04 23:26) [60]
;)))))))))))


 
maxistent ©   (2004-10-09 18:19) [62]


> VMcL ©   (08.10.04 23:26) [60]

:) А как на счёт вилки?..


 
kaZaNoVa ©   (2004-10-09 18:28) [63]

maxistent ©   (09.10.04 18:19) [62]
offtopic foreva этой ветки !!!


 
maxistent ©   (2004-10-10 16:33) [64]

Точно, оффтоп!


 
VMcL ©   (2004-10-10 17:45) [65]

>>maxistent ©  (09.10.04 18:19) [62]

Ну насчет вилки давай уж как-нибудь сам погугли :-)


 
maxistent ©   (2004-10-13 18:32) [66]

Ладно, проехали...



Страницы: 1 2 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.027 c
1-1102910118
Керик
2004-12-13 06:55
2004.12.26
Работа с папками


1-1102717713
Bobby Digital
2004-12-11 01:28
2004.12.26
Memo


4-1100254179
Shadow-UA
2004-11-12 13:09
2004.12.26
Программная блокировка рабочей станции под Win2k


4-1100528405
Maxuz
2004-11-15 17:20
2004.12.26
Запуск внешнего приложения через CreateProcess


14-1102330070
AlexG
2004-12-06 13:47
2004.12.26
Оценим сайт? Интересно просто ваше мнение...