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

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



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

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

Наверх




Память: 0.56 MB
Время: 0.027 c
3-1101157374
serko
2004-11-23 00:02
2004.12.26
Печать DbEhlib


3-1101282742
NewDelpher
2004-11-24 10:52
2004.12.26
жуткий глюк MS SQL


1-1102669656
korvin
2004-12-10 12:07
2004.12.26
Форма не держится "сверху"


1-1102588333
Tornado
2004-12-09 13:32
2004.12.26
Форма в DLL


6-1097733021
Dr. Genius
2004-10-14 09:50
2004.12.26
TDriveType, dtFixed, dtNetWork