![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при отправке 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, переданного вторым параметром в метод-обработчик текущего события