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

Вниз

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;
и получаю сообщение об ошибке чтения адреса
народ подскажите в чом проблема


 
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]


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

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


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

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


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

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


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


> lena19


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

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


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


> lena19


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

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


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

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


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

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


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

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

2.

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


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


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

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

2.

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


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


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

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


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

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


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

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


 
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;


 
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) [9]

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

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

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


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

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


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

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


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

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


 
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 19:52) [12]

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


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

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


 
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);


 
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: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


 
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: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;


 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.038 c
1-1082621579
Stas
2004-04-22 12:12
2004.05.09
Работа с памятью


6-1079823666
Автор
2004-03-21 02:01
2004.05.09
Как программе использовать для вычислений несколько компов в сети


14-1081956180
}|{yk
2004-04-14 19:23
2004.05.09
IBExpert Forms


1-1082189044
Orion777
2004-04-17 12:04
2004.05.09
Использование ресурсов в компонентах


8-1076386138
scorpi
2004-02-10 07:08
2004.05.09
OpenGL





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