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

Вниз

возникает ошибка: 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
2-1214300224
qwert
2008-06-24 13:37
2008.07.27
Запуск *,exe


2-1214804599
Евгений__
2008-06-30 09:43
2008.07.27
form.print


15-1212990193
Mozgan
2008-06-09 09:43
2008.07.27
Обработчик команд ?


2-1214468381
Ega23
2008-06-26 12:19
2008.07.27
Правильно ли написал наследника TList?


2-1214219491
Евро2008
2008-06-23 15:11
2008.07.27
Повернуть на 90 градусов