Форум: "Сети";
Текущий архив: 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.037 c