Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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 создается окно , принимающее нотификационные сообщения гнезда о событиях транспорта !

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


 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.62 MB
Время: 0.037 c
9-1091648899
DeadMeat
2004-08-04 23:48
2004.12.26
Статистика


14-1102401897
Кудесник
2004-12-07 09:44
2004.12.26
Существуют ли мелкие бесперебойники для питания свичей?


1-1102693122
_Дельфин_
2004-12-10 18:38
2004.12.26
Как сделать прозрачным фон TAnimate?


3-1101107259
MakNik
2004-11-22 10:07
2004.12.26
dxDBGrid


1-1103038825
Dmitry_04
2004-12-14 18:40
2004.12.26
Посоветуйте какойнибудь компонент для выбора цвета, как в Word-е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский