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