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

Вниз

Ошибка при отправке 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.011 c
8-1128695627
NikNet
2005-10-07 18:33
2006.03.12
Где компонент TMediaPlayer хранит данные?


2-1140708558
Vitalik__
2006-02-23 18:29
2006.03.12
Кодировки и системы счисления


15-1139950881
LordOfRock
2006-02-15 00:01
2006.03.12
Фильм DooM


2-1140952057
kot137
2006-02-26 14:07
2006.03.12
добавление поля в табл. с текущей датой


2-1140064646
maxer
2006-02-16 07:37
2006.03.12
использование xml





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