用ServerSocket和ClientSocket组件进行文件传输的问题,大哥大姐帮忙,只有10分了

星幻子 2005-03-09 12:26:35
var
Receiving: Boolean; //是否在接收文件
Buff: Point;
RealCount: Integer; //当前发送位置
Const
DataSize = 4096;//每次发送的字节数
发送的代码
IF Socket.ReceiveText = 'Ready To Receive Next' then
begin
GetMem(Buff,DataSize);
RealCount := SendFileStream.Read(Buff^,DataSize);
ClientSocket_SendFile.Socket.Sendbuf(Buff^,RealCount);
end;

接收代码
IF Not Receiving then
ReceiveFileStream := TFileStream.Create('C:\'+ReceiveFileName,fmCreate and fmOpenWrite);

Receiving := True;
Getmem(Buff,DataSize);
RealCount := Socket.ReceiveBuf(Buff^,DataSize);
ReceiveFileStream.WriteBuffer(Buff^,RealCount);
FreeMem(Buff);
ServerSocket_SendFile.Socket.Connections[0].SendText('Ready To Receive Next');

运行时出现这样问题:在接收到第一个数据后,反馈给发送方让发送方继续发送第二个数据
可是第儿个数据发送过来后,执行 ReceiveFileStream.WriteBuffer(Buff^,RealCount);语句程序
就会出错,提示是:Access violation at address 0041B4E5 in moudle 'xxx.exe'.Read of
address B883665F.
试过好多方法就是不行,请各位赐教啊,只有10分了,请各位高台贵手

...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jilu_sun 2005-04-26
  • 打赏
  • 举报
回复
MARK
quansui 2005-03-13
  • 打赏
  • 举报
回复
up
xjlqlqlq 2005-03-12
  • 打赏
  • 举报
回复
iLength:=Socket.ReceiveLength;
GetMem(bufRecv,iLength);
FreeMem(Buff); //把这句去掉

var
iLength:integer;
接收代码
IF Not Receiving then
ReceiveFileStream := TFileStream.Create('C:\'+ReceiveFileName,fmCreate and fmOpenWrite);

Receiving := True;
iLength:=Socket.ReceiveLength;
GetMem(bufRecv,iLength);
try
RealCount := Socket.ReceiveBuf(Buff^,iLength);
ReceiveFileStream.WriteBuffer(Buff^,iLength);
finally
FreeMem(Buff);
end;
ServerSocket_SendFile.Socket.Connections[0].SendText('Ready To Receive Next');
星幻子 2005-03-09
  • 打赏
  • 举报
回复
每次出错后接收到的文件有4K,说明第一次发送的数据接收成功了,为什么第二次就报错?
jadeluo 2005-03-09
  • 打赏
  • 举报
回复
接收代码存在着一个比较严重的问题:如果RealCount < DataSize, 则就会出现发送方只发了一个DataSize的数据包, 而接收方却回复了多个'Ready To Receive Next'。

至于你所说的现象是否与上面的问题有关,目前还不太清楚。
星幻子 2005-03-09
  • 打赏
  • 举报
回复
救命啊
vinsonshen 2005-03-09
  • 打赏
  • 举报
回复
up

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧