Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при отправке ServerSocket-ом ClientSocket-у [D7, WinXP]


Дмитрий_05 ©   (2005-11-23 19:39:00) 

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

ClientSocket.Socket.SendText(Edit2.Text);

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

ServerSocket.Socket.SendText(Edit1.Text);

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


Digitman   (2005-11-24 16:22:00) [1]

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


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

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


Digitman   (2005-11-24 16:07:00) [3]

WSAENOTCONN (10057) = The socket is not connected

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


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

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


Digitman   (2005-11-24 15:54:00) [5]

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

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


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

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


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

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

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


Digitman   (2005-11-24 15:26:00) [8]


> Клиент 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:07:00) [9]

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 14:54:00) [10]


> user18   (24.11.05 14:42) [2]


> Что делать


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

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


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

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


Digitman   (2005-11-24 10:17:00) [12]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо