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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
6-1091441323
Дмитрий Ботвин
2004-08-02 14:08
2004.10.17
UDP cканер сети


1-1096955475
DelphiN!
2004-10-05 09:51
2004.10.17
А в %C0


1-1096532410
slart
2004-09-30 12:20
2004.10.17
Drag&drop


3-1095696686
Sigetta
2004-09-20 20:11
2004.10.17
Восстановление индекса


3-1095452204
BigError
2004-09-18 00:16
2004.10.17
Запуск двух MySQL под Windows XP.