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

Вниз

возникает ошибка: Asynchronous socket error 10053   Найти похожие ветки 

 
Sergl ©   (2007-09-27 22:36) [0]

Хочу отправить файл через сокет:

на сервере:

procedure Tserver_glav_form.Button1Click(Sender: TObject);
var asd:Tmemorystream;
begin
asd := TMemoryStream.Create;
asd.LoadFromFile("c:\1.txt");
asd.Position:=0;
if (serversocket1.Socket.Connections[0].Connected) then begin
 if serversocket1.Socket.Connections[0].SendStream(asd) then showmessage("ушло") else showmessage("не ушло");
end else showmessage("false");
asd.free;//здесь возникает ошибка Access violation
end;


на клиенте:

procedure Tclientglav_form.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var asd:tmemorystream;
     len:integer;
     buf:pointer;

begin
 Len:=Socket.ReceiveLength;;
 GetMem(Buf, Len+1);
 asd:=TMemoryStream.Create;
 asd.Position:=0;
 ClientSocket1.Socket.ReceiveBuf(Buf, Len);
 asd.WriteBuffer(buf, Len);
 asd.Position:=0;
 asd.SaveToFile(PChar("c:\000.txt"));
 asd.Free;
FreeMem(Buf);//Здесь возникает ошибка Access violation
 clientsocket1.Socket.Close;
end;


Объясните, пожалуйста, как исправить ошибки?

PS. тестирую на одном компе. В итоге файл сохраняет:)


 
Сергей М. ©   (2007-09-28 08:44) [1]


> asd.free;//здесь возникает ошибка Access violation


Справку-то читал по SendStream ?


> FreeMem(Buf);//Здесь возникает ошибка Access violation


Потому что содержимое переменной Buf ты испоганил в этой строчке:


> ClientSocket1.Socket.ReceiveBuf(Buf, Len);


 
Sergl ©   (2007-09-28 09:25) [2]

С первой access violation все ясно, а со второй нет...

> Потому что содержимое переменной Buf ты испоганил в этой
> строчке:> ClientSocket1.Socket.ReceiveBuf(Buf, Len);

Чем и когда я испоганил Buf...не понимаю...?


 
Сергей М. ©   (2007-09-28 10:00) [3]


> Чем и когда я испоганил Buf.


Испоганил ты эту переменную вызовам метода ReceiveBuf, не разыменовав переменную указательного типа Buf.


 
Sergl ©   (2007-09-28 10:01) [4]


> Сергей М. ©   (28.09.07 08:44) [1]
> > asd.free;//здесь возникает ошибка Access violationСправку-
> то читал по SendStream ?> FreeMem(Buf);//Здесь возникает
> ошибка Access violationПотому что содержимое переменной
> Buf ты испоганил в этой строчке:> ClientSocket1.Socket.ReceiveBuf(Buf,
>  Len);

Спасибо! Нужно было писать

ClientSocket1.Socket.ReceiveBuf(Buf^, Len);
asd.WriteBuffer(buf^, Len);


Теперь возникла вот такая проблема: если посылаю файл больше 8192byte`а
то прога тоже ругается:"Asynchronous socket error 10053"  Я так полагаю нужно где-то настроить размер передаваемых вайлов? А вот где я не знаю.


 
Сергей М. ©   (2007-09-28 10:05) [5]


> ругается:"Asynchronous socket error 10053"


SendStream не может вызвать такой ошибки.


 
Сергей М. ©   (2007-09-28 10:12) [6]


> SendStream не может вызвать такой ошибки.


Пардон, ошибка возникает из-за того, что обработав на клиентской стороне одно-единственное событие OnRead ты тут же закрываешь соединение.


 
Sergl ©   (2007-09-28 10:27) [7]


> Сергей М. ©   (28.09.07 10:12) [6]
> > SendStream не может вызвать такой ошибки.Пардон, ошибка
> возникает из-за того, что обработав на клиентской стороне
> одно-единственное событие OnRead ты тут же закрываешь соединение.
>

Спасибо еще раз! Все... вопросов, пока, больше не имею.

ЗЫ.Блин... два дня убил на это.... однакож цель оправдывает средства:)


 
Сергей М. ©   (2007-09-28 10:37) [8]


> Блин... два дня убил на это


И еще минимум столько же убьешь)

Грабли-то, судя по коду, продолжают иметь место быть)

Обрати самое серьезное внимание на то, что метод ReceiveBuf является функциональным, а не процедурным.



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

Форум: "Сети";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
15-1213126413
wl
2008-06-10 23:33
2008.07.27
oracle getting started


2-1214633047
Yury
2008-06-28 10:04
2008.07.27
Access violation...


6-1190980794
HaJik
2007-09-28 15:59
2008.07.27
IndyTCPClien Заменить сообщение об ошибке.


2-1213914116
dev
2008-06-20 02:21
2008.07.27
IdPOP3


15-1213178784
Омлет
2008-06-11 14:06
2008.07.27
Программа для работы с гениалогическим древом





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