Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c