Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

serversocket кривыми ручками   Найти похожие ветки 

 
lena19   (2004-03-15 22:58) [0]

привет всем
создаю сервер :
procedure TLan.createserver(sender:Tobject);
begin
Server:=Tserversocket.Create(nil);
server.OnClientError:=onLanerror;
server.OnClientConnect:=onLanconnect;
Server.Port:=Lanport;
server.Tag:=1;
server.Active:=true;
end;
из другой процедуры
передаю им текст
procedure Tlan.transiv(sender:tobject);
var s:string;
begin
s:=fcommand+" "+ftext;
server.socket.Connections[0].SendText(s);
end;
и получаю сообщение об ошибке чтения адреса
народ подскажите в чом проблема


 
Cobalt ©   (2004-03-15 23:30) [1]

А если вместо s подставить строку-константу, типа "Test string"?
Если всё равно ошибка, значит ошибка где-то тут: server.socket.Connections[0]


 
lena19   (2004-03-15 23:42) [2]

в етой процедуре не тока передать
строку не получается ,но и отрубить запущенный сервер


 
Digitman ©   (2004-03-16 08:22) [3]


> lena19


для начала могу предположить, что ты, не дождавшись ни одного события OnClientConnect , пытаешься передать что-то 0-му клиенту, соединения с которым еще не существует

более того, передача данных по установленной в рез-те коннекта петле вирт.соединения допустима и/или корректна лишь при факте возбуждения события On[Client]Write ... ты же не обрабатываешь это событие вообще, насколько это видно из примера


 
lena19   (2004-03-16 10:54) [4]

соединение у клиента и сервера состоялось ето я проверяла события конект отработали с обоих сторон


 
Digitman ©   (2004-03-16 11:08) [5]

1. в какой момент времени ты вызываешь метод Tlan.transiv ?

2.

> получаю сообщение об ошибке чтения адреса


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


 
lena19   (2004-03-16 11:14) [6]

tlan.transiv вызываю в произвольный момент времени .
ошибку выдает любое обращение к серверу даже закрытие сервера


 
Digitman ©   (2004-03-16 11:48) [7]

где и как объявлен ид-р "server" ?


 
lena19   (2004-03-16 17:05) [8]

ето код используемого класса

type
 TLan = class
  Server:Tserversocket;   Client:Tclientsocket;
procedure createserver(sender:Tobject);
public
   procedure transiv(sender:tobject);
var
      Lan:Tlan;
      const  LanPort:integer = 6969;

     implementation
procedure TLan.createserver(sender:Tobject);
begin
Server:=Tserversocket.Create(nil);
.......
end;

procedure Tlan.transiv(sender:tobject);
var s:string;
begin
s:=fcommand+" "+ftext;
server.socket.Connections[0].SendText(s);
end;

он создается  из основной проги так :
procedure TForm1.Button7Click(Sender: TObject);
var Lan:TLan;
begin
Lan:=Tlan.Create;Lan.createserver(nil);
end;
процесс передачи активизируется так:
procedure TForm1.Button9Click(Sender: TObject);
begin
lan.command:="com proba";lan.text:="text proba";
lan.transiv(nil);
end;


 
Digitman ©   (2004-03-16 17:57) [9]

каша какая-то ..

ладно, разбираться в каше - дело неблагодарное

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


 
Digitman ©   (2004-03-16 17:57) [10]

Удалено модератором
Примечание: Дубль...


 
Digitman ©   (2004-03-16 17:58) [11]

Удалено модератором
Примечание: Дубль...


 
lena19   (2004-03-16 19:52) [12]

Digitman спасибо за участие в етой дискуссии
ошибка выглядит так :
проект вызвал исключение класса Eaccessviolation с сообщением
Access violation at addres ........
на строке:
server.socket.Connections[0].SendText(s);


 
lena19   (2004-03-16 22:00) [13]

!!!!!!!! народ выручайте !!!!!!!!!


 
Verg ©   (2004-03-17 06:42) [14]


> server.socket.Connections[0].SendText(s);


Ну так, от куда такая уверенность-то что 0-вой элемент Connections существует? Я так и не понял.

Я не знаю, прям... хоть бы проверка была что ли.
Да и вообще, что, сервер расчитан исключительно на одного клиента? Типа "кто первый встал - того и тапки"?

for I:=0 to server.scoket.activeconnections -1 do
 server.socket.Connections[I].SendText(s);


 
Digitman ©   (2004-03-17 08:15) [15]

если уж на то пошло, то

if Server.Socket.ActiveConnections > 0 then
 BytesSent := Server.socket.Connections[0].SendText(s);


 
Digitman ©   (2004-03-17 08:29) [16]


> Verg


вряд ли AV возникнет, если нет активных коннектов ..
ибо св-во Connections - это обычный TList, а обращение к несуществующему эл-ту такого списка генерирует иное исключение :

function TList.Get(Index: Integer): Pointer;
begin
 if (Index < 0) or (Index >= FCount) then
   Error(@SListIndexError, Index);
 Result := FList^[Index];
end;

т.е. скорей всего на момент выполнения этой строчки сама переменная Server равна nil или указывает черт те на какой мусор..
потому что если иначе, то нонсенс получается : св-во TServerSocket.Server не м.б. = nil (TServerWinSocket сразу же создается в конструкторе TServerSocket), список Connections тоже не м.б. = nil (список создается в конструкторе TServerWinSocket), метод SendText() тоже не может быть причиной именно AV (максимум что там можно ожидать - специф.ошибки Winsock) .. все это никак не зависит ни от активности серверного гнезда ни от числа активных на этот момент коннектов ..

так что все сводится к nil"у или "мусору" в переменной server: TSocketServer


 
Verg ©   (2004-03-17 09:46) [17]

Digitman.
Тогда уж не Server, а Lan указывает на мусор

ваметь:

lan.transiv(nil);

А теперь

> он создается  из основной проги так :
> procedure TForm1.Button7Click(Sender: TObject);
> var Lan:TLan;> begin
> Lan:=Tlan.Create;Lan.createserver(nil);
> end;
> процесс передачи активизируется так:
> procedure TForm1.Button9Click(Sender: TObject);
> begin
> lan.command:="com proba";lan.text:="text proba";
> lan.transiv(nil);
> end;


 
Verg ©   (2004-03-17 09:47) [18]

Я имею ввиду

>  procedure TForm1.Button7Click(Sender: TObject);
>  var Lan:TLan;
>  begin
>  Lan:=Tlan.Create;Lan.createserver(nil);
>  end;



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

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

Наверх




Память: 0.51 MB
Время: 0.039 c
11-1066944174
XAMLO
2003-10-24 01:22
2004.04.11
Установка mck


14-1082440980
XAOC
2004-04-20 10:03
2004.04.11
что это такое и с чем его есть??????????????????


1-1080209466
XmPL
2004-03-25 13:11
2004.04.11
Есть ли в Delphi аналог #pragma once ?


8-1076781659
VasRog
2004-02-14 21:00
2004.04.11
Как узнать цвет пикселя


3-1079459290
Mike_T
2004-03-16 20:48
2004.04.11
SQL запрос!!! Уважаемые мастера помогите.