Форум: "Сети";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизPByteArray Найти похожие ветки
← →
R2D2 (2004-08-05 16:33) [0]Как переслать на др. компьютер (проге-клиенту) массив байт (PByteArray).
← →
Rouse_ © (2004-08-05 16:34) [1]Загоняй в Stream и пересылай...
← →
R2D2 (2004-08-05 17:43) [2]Загоняю! Выглядит так (в кратце):
var
p: PByteArray;
...
begin
...
p := bitmap.ScanLine[y];
MyStream := TMemoryStream.Create;
MyStream.WriteBuffer(p,SIZEOF(p)); //загоняю
MyStream.Position:=0;
NMUDP1.SendStream(MyStream); //отсылаю
...
Как получить этот массив на др. компе?
begin
...
MyStream := TMemoryStream.Create;
NMUDP1.ReadStream(MyStream); //принимаю
MyStream.Position:=0;
MyStream.ReadBuffer(p,NumberBytes);
...
Так выдает ошибку.
← →
Kurtevich (2004-08-05 17:47) [3]
var p: pByteArray;
len : integer;
s: SOCKET;
winsock2.send(s,p^[0],len,0);
← →
Goorus (2004-08-06 13:25) [4]MyStream.WriteBuffer(p,SIZEOF(p));
В p у тебя хранится только ссылка на массив, это величина вроде Integer, и занимает она 4 байта. Делай, как говорит Kurtevich.
← →
Digitman © (2004-08-06 13:46) [5]var
p: PByteArray;
...
begin
...
p := bitmap.ScanLine[y];
MyStream := TMemoryStream.Create;
MyStream.WriteBuffer(p^,фактический_размер_буфера_!!!!!);
MyStream.Position:=0;
NMUDP1.SendStream(MyStream);
...
MyStream := TMemoryStream.Create;
NMUDP1.ReadStream(MyStream);
MyStream.Position:=0;
GetMem(p, MyStream.Size);
MyStream.ReadBuffer(p^,MyStream.Size);
> выдает ошибку
кр.всего прочего ошибка (причем грубая, связанная с особенностями UDP и с "кривостью" NMUDP, явно не учитывающего эти особенности) обязательно возникнет, если размер передаваемого потока превышает макс.доп.размер UDP-сообщения
← →
R2D2 (2004-08-08 16:16) [6]Переделал с использованием ClientSocket и ServerSocket. Выглядит так:
var
p: PByteArray;
...
begin
...
p := bitmap.ScanLine[y];
MyStream := TMemoryStream.Create;
MyStream.WriteBuffer(p,SIZEOF(p)); //загоняю
MyStream.Position:=0;
Size := ServerSocket1.Socket.Connections[0].SendBuf(ppp,MyStream.Size); //отсылаю
...
На другом компе получаю:
begin
...
oo := bitmap.ScanLine[y];
...
Socket.ReceiveBuf(ooo,Sizeof(oo)); //принимаю
for x := 0 to b.Width * 3 - 1 do
oo^[x] := round(ooo^[x]); //возникает ошибка
...
Причем ошибка возникает только тогда, когда "работают" 2 программы (клиент и сервер). А если весь код написан в ондой проге (она клиент и сервер), то все ОК, работает как надо! В чем может быть проблема?
← →
R2D2 (2004-08-08 16:55) [7]Предыдущий код совершенно не такой! А вот такой:
var
pic1, pic2: PByteArray;
...
begin
...
for y := 0 to bitmap.Height - 1 do begin
pic1:= bitmap.ScanLine[y];
Size := ServerSocket1.Socket.Connections[0].SendBuf(pic1,SIZEOF(pic1)); //отсылаю
end;
На другом компе получаю:
begin
...
oo := bitmap.ScanLine[y];
...
Socket.ReceiveBuf(ooo,Sizeof(oo)); //принимаю
for x := 0 to b.Width * 3 - 1 do
oo^[x] := round(ooo^[x]); //возникает ошибка
...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c