![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите, создаю сервис и в нем TServerSocket соединится то [D7, Win2k, WinXP]
_shark © (2004-02-25 12:43:00)позволяет, а вот при попытке SendText, вылетает :-((((
Будте добры подскажите.
_shark_ (2004-02-26 09:05:00) [1]Пасибо!
Digitman (2004-02-25 15:33:00) [2]
> Линк на толковую инфу про сервисы
инф-цию о программировании сервисов непосредственно на WinAPI можно получить на msdn.microsoft.com
логика же сервис-приложений под управлением станд.VCL-класса TServiceApplication легко постигается изучением свободно распространяемых исх.текстов этого класса ... лучше "ссылки" не придумать
+ хэлп
BiN (2004-02-25 15:19:00) [3]http://msdn.com
_shark (2004-02-25 15:17:00) [4]Это не гордость, а так констатация фактов;-)
чтобы строго не судили
а с ServerSocket.Socket.SendText(..)
это я правда протормозил просто видно когда переносил код лишку махнул, ПАСИБО большое за помощь,
но только если не затруднит, то не могли бы подкинуть Линк на толковую инфу про сервисы полиз !!!
Digitman (2004-02-25 14:55:00) [5]
> вот такой вот я лламер
нашел чем гордиться
> метод Execute я никак не обрабатываю
это твое право
> на счет статьи то это давно было и кажись она называлась
> "простой способ передачи файлов с помошью TclientSocket/Tserversocet"
и что ? ты хочешь сказать, что в примере к этой статье вот так вот прямо и написано :
ServerSocket.Socket.SendText(..) ?
не верю...это уже отсебячина твоя
я тебе уже сказал, где ключевая ошибка.. в обработчике
OnClientRead следует писать
Результат := Socket.SendText(..);
разницу ощущаешь ?
_shark (2004-02-25 14:45:00) [6]К сожалению я в сервисах плохо разбираюсь, вот именно поэтому
метод Execute я никак не обрабатываю :-(
А вот на счет где создается Сервер сокет, он вообщето объявлен в классе сервис и видимо им и создается,
а метод он врите в принципе ничего и не делает просто я пишу в лог что событие произошло, вот такой вот я лламер ;-)
и я был бы благодарен если даш линк на информацию путевую про сервисы дашь
а на счет статьи то это давно было и кажись она называлась
"простой способ передачи файлов с помошью TclientSocket/Tserversocet"
заранее благодарен за пояснения
Digitman (2004-02-25 14:05:00) [7]
> пример я взял если не ошибаюсь с этого сайта
покажи ссылку на конкр.ресурс, где ты взял за образец этот корявый код
> онклиентврите обрабатывается
покажи как
> что за BytesSent
малообразованный хэлп-то удосужился прочитать ? там ведь черным по белому написано, что SendText - это функция! А ф-ция всегда возвращает некий результат, который ты почему-то игнорируешь
> Start у меня пройзводит ... ТСР портов, а в Стоп е их
> закрытий.
надо понимать, и активация/деактивация ServerSocket - тоже в этих обработчиках ? А где собственно создается/уничтожается ServerSocket ? И чем занят метод Execute ?
_shark (2004-02-25 13:57:00) [8]Start у меня пройзводит инициализацию всех переменных подключение файла логов активизация удп и ТСР портов, а в Стоп е их закрытий.
_shark (2004-02-25 13:51:00) [9]да я бы не сказал что не работает :-) все отлично работае и пример я взял если не ошибаюсь с этого сайта, и онклиентврите обрабатывается,А еще плиз поясните малообразованному что за BytesSent ?
Digitman (2004-02-25 13:50:00) [10]и вообще непонятно, чем у тебя занимаются методы-обработчики событий TService1.Start/Stop/Execute
Digitman (2004-02-25 13:37:00) [11]
> главно все тоже самое работает в обычной программе
это и в обычной программе не будет работать, за небольшим исключением (при условии, что код корректен), когда и сервер и клиент работают на одном и том же хосте
а код у тебя не корректен в принципе
вот первая же грубая ошибка :
> Service1.ss1.Socket.SendText(IntToStr(ms.Size) + #0);
вместо этого следует (как минимум !) делать
BytesSent := Socket.SendText(IntToStr(ms.Size) + #0);
и далее анализировать значение в BytesSent
кр.того , в неблок.режиме событие On[Client]Write должно обрабатываться ОБЯЗАТЕЛЬНО ... это тесно связано с BytesSent
_shark (2004-02-25 13:26:00) [12]главно все тоже самое работает в обычной программе, а в сервисе почему то нет
это процедура в сервисе:
procedure TService1.ss1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ms: TMemoryStream;
begin
ms:= TMemoryStream.Create;
log ('==client read== from ip '+Socket.RemoteAddress+' host '+Socket.RemoteHost);
try
log('Memory stream create succesfull!!!');
form2.Image1.Picture.Bitmap.SaveToStream(ms);
ms.Position:= 0;
Service1.ss1.Socket.SendText(IntToStr(ms.Size) + #0);
service1.ss1.Socket.SendStream(ms);
except
ms.Free;
end;
end;
А при соединении телнетом или неткатом сединяется а потом пройсходит дисконект после посылки любого символа если нужна процедура приемки на клиентскомашине то вот она
procedure TForm1.cs1Read(Sender: TObject; Socket: TCustomWinSocket);
var
d,ss, sl: string;
begin
ss:= Socket.ReceiveText;
if not Recivin then
begin
// Теперь нам необходимо получить длину потока данных.
SetLength(sl, StrLen(PChar(ss))+1); // +1 for the null terminator
StrLCopy(@sl[1], PChar(ss), Length(sl)-1);
DataSize:= StrToInt(sl);
Data:= TMemoryStream.Create;
// Удаляем информацию о размере из данных.
Delete(ss, 1, Length(sl));
Recivin:= true;
end;
данные.
try
Data.Write(ss[1], length(ss));
if Data.Size = DataSize then
begin
Data.Position:= 0;
fscreen.BorderStyle:=bsnone;
{FORM4.width:=screen.Width;
form4.height:=screen.Height;}
fscreen.WindowState:=wsmaximized;
fscreen.Image1.Width:=fscreen.Width;
fscreen.Image1.Height:=fscreen.Height;
fscreen.Image1.Picture.Bitmap.LoadFromStream(Data);
fscreen.Show;
Data.Free;
Recivin:= false;
Socket.Close;
end;
except
Data.Free;
end;
end;
Digitman (2004-02-25 13:08:00) [13]
> _shark (25.02.04 13:06) [2]
приводи код транспорта серверной и кл.части
_shark (2004-02-25 13:06:00) [14]сеанс связи обрывается пишет что удаленный узел пренудительно разорвал соединение и подключиться к данному компьютеру нельзя, при этом сервис во всем остальном исправно работает.
Digitman (2004-02-25 12:48:00) [15]
> создаю сервис и в нем TServerSocket соединится то позволяет
ты сам-то понял, что сказал ? чушь ведь ... набор несвязных слов ...
> при попытке SendText, вылетает
кто вылетает ? куда ? как это выглядит ?