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

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



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

Форум: "Сети";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.037 c
14-1102069619
andsoft
2004-12-03 13:26
2004.12.26
Нужен человек для написания отладчика


1-1102807915
SergP
2004-12-12 02:31
2004.12.26
Проблема с TXMLDocument


14-1101808213
Sur
2004-11-30 12:50
2004.12.26
PL/1 - Programming Language One


1-1102541545
Kolan
2004-12-09 00:32
2004.12.26
Хеш функции для срок


14-1101492737
VEG
2004-11-26 21:12
2004.12.26
Экстремальное тестирование музыкальных форматов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский