Главная страница
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.031 c
2-1214340173
lewka-serdceed
2008-06-25 00:42
2008.07.27
оперции с числами


1-1196173560
Гость
2007-11-27 17:26
2008.07.27
Растягивание элементов на бэнде Fastreport 4


15-1213169514
Olegz77
2008-06-11 11:31
2008.07.27
Перестают загружаться Design time пакеты


2-1214401410
Makaveli
2008-06-25 17:43
2008.07.27
WinInet и HttpSendRequest


10-1148469511
AbrosimovA
2006-05-24 15:18
2008.07.27
Как прочитать сгенерированное сообщение по останову сервиса