Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

Подскажите, создаю сервис и в нем TServerSocket соединится то   Найти похожие ветки 

 
_shark   (2004-02-25 12:43) [0]

позволяет, а вот при попытке SendText, вылетает :-((((
Будте добры подскажите.


 
Digitman ©   (2004-02-25 12:48) [1]


>  создаю сервис и в нем TServerSocket соединится то позволяет


ты сам-то понял, что сказал ? чушь ведь ... набор несвязных слов ...


> при попытке SendText, вылетает


кто вылетает ? куда ? как это выглядит ?


 
_shark   (2004-02-25 13:06) [2]

сеанс связи обрывается пишет что удаленный узел пренудительно разорвал соединение и подключиться к данному компьютеру нельзя, при этом сервис во всем остальном исправно работает.


 
Digitman ©   (2004-02-25 13:08) [3]


> _shark   (25.02.04 13:06) [2]


приводи код транспорта серверной и кл.части


 
_shark   (2004-02-25 13:26) [4]

главно все тоже самое работает в обычной программе, а в сервисе почему то нет
это процедура в сервисе:

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:37) [5]


> главно все тоже самое работает в обычной программе


это и в обычной программе не будет работать, за небольшим исключением (при условии, что код корректен), когда и сервер и клиент работают на одном и том же хосте

а код у тебя не корректен в принципе
вот первая же грубая ошибка :


> Service1.ss1.Socket.SendText(IntToStr(ms.Size) + #0);


вместо этого следует (как минимум !) делать

BytesSent := Socket.SendText(IntToStr(ms.Size) + #0);

и далее анализировать значение в BytesSent

кр.того , в неблок.режиме событие On[Client]Write должно обрабатываться ОБЯЗАТЕЛЬНО ... это тесно связано с BytesSent


 
Digitman ©   (2004-02-25 13:50) [6]

и вообще непонятно, чем у тебя занимаются методы-обработчики событий TService1.Start/Stop/Execute


 
_shark   (2004-02-25 13:51) [7]

да я бы не сказал что не работает :-) все отлично работае и пример я взял если не ошибаюсь с этого сайта,  и онклиентврите обрабатывается,А еще плиз поясните малообразованному  что за BytesSent ?


 
_shark   (2004-02-25 13:57) [8]

Start у меня пройзводит инициализацию всех переменных подключение файла логов активизация удп и ТСР портов, а в  Стоп е их  закрытий.


 
Digitman ©   (2004-02-25 14:05) [9]


> пример я взял если не ошибаюсь с этого сайта


покажи ссылку на конкр.ресурс, где ты взял за образец этот корявый код


> онклиентврите обрабатывается


покажи как


> что за BytesSent


малообразованный хэлп-то удосужился прочитать ? там ведь черным по белому написано, что SendText - это функция ! А ф-ция всегда возвращает некий результат, который ты почему-то игнорируешь


> Start у меня пройзводит ... ТСР портов, а в  Стоп е их
>  закрытий.


надо понимать, и активация/деактивация ServerSocket - тоже в этих обработчиках ? А где собственно создается/уничтожается ServerSocket ? И чем занят метод Execute ?


 
_shark   (2004-02-25 14:45) [10]

К сожалению я в сервисах плохо  разбираюсь, вот именно поэтому
метод Execute я никак не обрабатываю :-(
А вот на счет где  создается Сервер сокет, он вообщето объявлен в классе сервис и видимо им и создается,
а метод он врите в принципе ничего и не делает просто я пишу в лог что событие произошло, вот такой вот я лламер ;-)
и я был бы благодарен если даш линк на информацию путевую  про сервисы дашь
а на счет статьи то это давно было и кажись она называлась
"простой способ передачи файлов с помошью TclientSocket/Tserversocet"
заранее благодарен за пояснения


 
Digitman ©   (2004-02-25 14:55) [11]


> вот такой вот я лламер


нашел чем гордиться


> метод Execute я никак не обрабатываю


это твое право


> на счет статьи то это давно было и кажись она называлась
> "простой способ передачи файлов с помошью TclientSocket/Tserversocet"


и что ? ты хочешь сказать, что в примере к этой статье вот так вот прямо и написано :

ServerSocket.Socket.SendText(..) ?

не верю...это уже отсебячина твоя

я тебе уже сказал, где ключевая ошибка.. в обработчике
OnClientRead следует писать

Результат := Socket.SendText(..);

разницу ощущаешь ?


 
_shark   (2004-02-25 15:17) [12]

Это не гордость, а так констатация фактов;-)
чтобы строго  не судили
а с ServerSocket.Socket.SendText(..)
это я правда протормозил просто видно когда переносил код лишку махнул, ПАСИБО большое за помощь,
но только если не затруднит, то не могли бы подкинуть Линк на толковую инфу про сервисы полиз !!!


 
BiN ©   (2004-02-25 15:19) [13]

http://msdn.com


 
Digitman ©   (2004-02-25 15:33) [14]


> Линк на толковую инфу про сервисы


инф-цию о программировании сервисов непосредственно на WinAPI можно получить на msdn.microsoft.com

логика же сервис-приложений под управлением станд.VCL-класса TServiceApplication легко постигается изучением свободно распространяемых исх.текстов этого класса ... лучше "ссылки" не придумать

+ хэлп


 
_shark_ ©   (2004-02-26 09:05) [15]

Пасибо!



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

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

Наверх





Память: 0.49 MB
Время: 0.053 c
3-1080560267
stelius
2004-03-29 15:37
2004.04.25
Опять про скорость


1-1081149715
Ivolg
2004-04-05 11:21
2004.04.25
Одноразовый запуск приложения


4-1077907649
gavrila
2004-02-27 21:47
2004.04.25
WNetLogonA & WNetLogoffA from mpr.dll


14-1080838019
Desdechado
2004-04-01 20:46
2004.04.25
Как для конкретного юзера винды ХР заблокировать флоп


7-1077905795
DuhcmanSoft
2004-02-27 21:16
2004.04.25
Как узнать полный путь к исполняемому файлу процесса?





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