那位来帮忙?(20分)

S

sxbing

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是一个点对点传送文件的程序,请大家帮我看看哪里有问题,每一次运行到
fsSend.ReadBuffer(bufSend^,iBYTEPERSEND);
时出现读地址错误?
Client
try
GetMem(bufSend,iBYTEPERSEND+1);
if (fsSend.Position+1+iBYTEPERSEND) < fsSend.Size then begin
fsSend.Read(bufSend^,iBYTEPERSEND);
Socket.SendBuf(bufSend^,iBYTEPERSEND);
// fsSend.Free;
end//普通的发送,大小为iBYTEPERSEND
else begin
fsSend.Read(bufSend^,fsSend.Size-fsSend.Position-1);
Socket.SendBuf(bufSend^,fsSend.Size-fsSend.Position-1);
fsSend.Free;
end;//最后一次发送,发送剩余的数据
finally
FreeMem(bufSend,iBYTEPERSEND+1);
end;{of try}
Server
try
GetMem(bufRecv,2000);//2000 must >iBYTESEND
Socket.ReceiveBuf(bufRecv^,iRecvLength);
fsRecv.WriteBuffer(bufRecv^,iRecvLength);
finally
FreeMem(bufRecv,2000);
end;{of try}
bReadText:=true;
Socket.SendText(MP_NEXTWILLBEDATA);
end;
 
估计是你fsSend中没有那么多个字节的内容可读取,你应该先判断下fsSend.Size-fs.Position大小,看看TmemoryStream 或者TFileStream中关于
ReadBuffer的帮助说明吧.

 
我觉得应该先确定一下发送过来的信息的长度,然后再按这个长度来读取。
另外bufsend在使用以前先清零,
zeromemory(bufsend);
 
顶部