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

Вниз

Ошибка при отправке ServerSocket-ом ClientSocket-у   Найти похожие ветки 

 
Дмитрий_05   (2005-11-23 19:39) [0]

Создал Сервер и Клиент на основе компонентов ServerSocket/ClientSocket. Приотправке клиентом сообщения серверу

ClientSocket.Socket.SendText(Edit2.Text);

проблем нету, все отправляется... а вот при отправке сообщения сервером клиенту(или всем клиентам, точно не знаю)

ServerSocket.Socket.SendText(Edit1.Text);

возникает ошибка.. как правильно отправлять сообщения сервером?


 
Digitman ©   (2005-11-24 10:17) [1]

в произвольный момент времени сообщение i-му активному клиенту м.б. отправлено вызовом send-метода объекта ServerSocket.Socket.Connections[i]

в момент обработки событий OnClientRead/Write сообщение клиенту, с которым ассоциировано событие, м.б. отправлено вызовом send-метода объекта Socket, переданного вторым параметром в метод-обработчик текущего события


 
user18   (2005-11-24 14:42) [2]

сделал тоже самое, при отправке ClientSOcket.Socket.SendText(text) где text : string
все хорошо, но на сервере,во время обработки в OnClinetRead
Memo1.Lines.Insert(0,"::",Socket.ReceiveText); во время обратотки этой строки сервер вываливается с ошибкой Access valation at adress 000000 и т.д. Что делать:\\\


 
Digitman ©   (2005-11-24 14:54) [3]


> user18   (24.11.05 14:42) [2]


> Что делать


вариантов немного :

1. Воспользоваться встроенным отладчиком.
2. Привести полный текст метода-обработчика, еще лучше - всего проекта.
3. Мылить  веревку.


 
user18   (2005-11-24 15:07) [4]

3 вариант сразу отпадает :)
2:
Клиент procedure TForm1.BitBtn1Click(Sender: TObject);
var
text : string;
begin
text := "v2.0.0.0";
ClientSocket1.Active:=true;
ClientSocket1.Host:= "localhost";
ClientSocket1.Port:=1025;
ClientSocket1.Socket.SendText(text)  ;
end;


Сервер procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Port:=1025;
ServerSocket1.Active:=true;
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,"Connected");
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,:: "+Socket.ReceiveText)
end;


все идет хорошо, как доходит до ...ClientRead... выскакивает табличка с Access valation и т.д.


 
Digitman ©   (2005-11-24 15:26) [5]


> Клиент procedure TForm1.BitBtn1Click(Sender: TObject);
> var
> text : string;
> begin
> text := "v2.0.0.0";
> ClientSocket1.Active:=true;
> ClientSocket1.Host:= "localhost";
> ClientSocket1.Port:=1025;
> ClientSocket1.Socket.SendText(text)  ;
> end;


с какого перепугу-то - сначала активация, и только следом установка хоста-порта ?! ...

сначала установка хоста-порта, потом активация (успешная) и только затем - инф.обмен ..

а вариант №1 - ЛУЧШИЙ вариант !  в лшюбом случае лучший ...


 
user18   (2005-11-24 15:45) [6]

Windows socket error: A request to send or receive data was disallowed is not connected and no aress was supplied(10057)

Это в серере, в клиенте никаких ошибок во время отправки не возникает.


 
user18   (2005-11-24 15:53) [7]

я понимаю так,что сразу же после конекта клиента,сервер его отключает\клиет отключается ?
Сервер же должен скинуть в новый поток этого клиента или я чет не понимаю?


 
Digitman ©   (2005-11-24 15:54) [8]

ты вообще о чем - о передаче или о приеме сервером ?

судя по Дмитрий_05   (23.11.05 19:39)  - о передаче, однако в user18   (24.11.05 15:07) [4] передачей и нее пахнет - там чистый прием


 
user18   (2005-11-24 16:01) [9]

ну да,о приеме, просто решил раз тема о сокетах, то тут и напишу, причем ситуации в ошибках приема\передачи не сильно то и различны.


 
Digitman ©   (2005-11-24 16:07) [10]

WSAENOTCONN (10057) = The socket is not connected

Этот отказ действительно возникает в ходе исполнения ф-ции winsock.recv() и вполне м.б. связан с разрывом ранее установленного коннекта на момент вызова ф-ции ... а кто явился инициатором разрыва - об этом история умалчивает)


 
user18   (2005-11-24 16:10) [11]

проверил след образом еще кое что.
к клиенте Host,Port,Active написал в OnCreate формы,а SendText поставил на ButtonClick/
Далее запустил сервер, после чего запустил клиент, сразу же после запуска клиента в Memo сревера появилась Connected и сервер выпал с ошибкой, т.е. до разравы соединения между коннектом и передачей данных дело не дошло :\\
Вывод : Сервер почему то не оставляет клиент подключенным,а вылетает в ошибкой


 
Digitman ©   (2005-11-24 16:22) [12]

приводи ПОЛНЫЙ код проекта клиента и сервера



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

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

Наверх




Память: 0.49 MB
Время: 0.051 c
6-1132763970
Дмитрий_05
2005-11-23 19:39
2006.03.12
Ошибка при отправке ServerSocket-ом ClientSocket-у


6-1130140516
isasa
2005-10-24 11:55
2006.03.12
Сеть XP + Win98.


2-1140965267
WestBronx
2006-02-26 17:47
2006.03.12
Папка "Автозаргузка" и данные из ярлыка.


4-1135118283
Delphi_is_cool
2005-12-21 01:38
2006.03.12
Как добавить строку


15-1140291000
kaZaNoVa
2006-02-18 22:30
2006.03.12
Обращение к VCL-контролам из потока