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

Вниз

Socket и Buffer   Найти похожие ветки 

 
Novichok   (2004-02-23 02:04) [0]

Передаю рисунок через Socket.
На стороне клиента следующий код

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 count:Integer;
 buffer: Array [0..MAX_BUF_SIZE] of Char;
 s, s2: string;
 mk: Integer;
begin
 repeat
   Socket.Lock;
   count:= Socket.ReceiveBuf(buffer,SizeOf(buffer));
   if count > 0 then
   begin
     s:="";
//До того как начать пересылку файла, я отсылаю его размер – типа $sz123456$sz
     if Pos("$sz", buffer)=1 then
       begin
         s := buffer;
         Delete(s, 1, 3);
         mk := Pos("sz$", s);
         filesize := strtoint(copy(s, 1, mk-1));
         Delete(s, 1, mk+2);
         s2 := "image.jpeg";
         fStream:= TFileStream.Create(s2, fmCreate);
       end
     else
       fStream.WriteBuffer(buffer,count);
   end;
   Socket.Unlock;
  until (count <= 0);
  if fStream.Size<>0 then
  begin
    s2 := inttostr(Round(fStream.Size/filesize*100));
    Form1.Caption:= "take fail-"+ s2 + "%";
  end;
  if fStream.Size=filesize then
  begin
    fStream.Free;
    filesize:=0;
  end;
end;

Файл доходит (Хотя не всегда, иногда зависает на 93 процах или еще скольки), но что самое интересное во время приёма файла постоянно вылетает ошибка:
Access violation at address 004166A0 in module ‘Project1.exe’. Read of address 00000014.

Код серверной части:
   str := TMemoryStream.Create;
   str.LoadFromFile("image.jpg");
   n:=str.Size;
   ServerSocket1.Socket.Connections[1].SendText("$sz"+inttostr(n)+"sz$");
   ServerSocket1.Socket.Connections[1].SendStream(str);

Мастера кто знает где я напортачил ???


 
Novichok   (2004-02-23 02:05) [1]

ups забыл код в теги взять sorry


 
Novichok   (2004-02-24 23:09) [2]

неужели никто не может мне почь с этим ?! :(


 
Verg ©   (2004-02-25 07:19) [3]

Устал уже спрашивать про режим сокета....
Какой, ctBlocking или ctNonBlocking ?


 
Polevi ©   (2004-02-26 09:22) [4]

допустим ты прочитал 100 байт, и нашел свою строку $sz123456$sz
как думаешь, куда деваются данные длиной Count-Length("$sz123456$sz") ???


 
Verg ©   (2004-02-26 10:26) [5]


> [4] Polevi ©   (26.02.04 09:22)
> допустим ты прочитал 100 байт, и нашел свою строку $sz123456$sz
> как думаешь, куда деваются данные длиной Count-Length("$sz123456$sz")
> ???


Хуже всего, когда на первый Onread он прочитал $sz123, например.


> if count > 0 then
>    begin
>      s:="";
> //До того как начать пересылку файла, я отсылаю его размер
> – типа $sz123456$sz
>      if Pos("$sz", buffer)=1 then
>        begin


Это все сработает, а вот что будет дальше.... страшно подумать.
А так же варианты вервого приема
$sz123456$sz+Какой-то кусок уже от файла...
и т.д. и т.п.


 
Polevi ©   (2004-02-26 11:23) [6]

>Verg ©   (26.02.04 10:26) [5]
вообщем все как обычно :-)



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

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
1-1081529987
tivispider
2004-04-09 20:59
2004.04.25
Проблема с StringGrid


1-1080740114
TankMan
2004-03-31 17:35
2004.04.25
Какое сообщение приходит при прокручивании скрола в ListBox?


3-1080139064
Виктор
2004-03-24 17:37
2004.04.25
Как в dxDBGrid-е вывалить програмно ExtLookupColumn


14-1080555947
Ega23
2004-03-29 14:25
2004.04.25
У кого опыт driver development есть, помогите!


1-1081251256
Dimitry
2004-04-06 15:34
2004.04.25
Запрет ввода некоторых символов в Edit