传送端:
procedure Tf_Main.rb_upClick(Sender: TObject);
var
nID:integer;
nSize:Integer;
n:Integer;
p:pByte;
data:TmemoryStream;
begin
data:=TmemoryStream.Create;
try
data.LoadFromFile(extractfilepath(application.EXEName)+'xfd.tmp');
with ClientSocket1 do
begin
open;
nSize:=data.Size;
p:=data.Memory;
while (nSize>0) do
begin
n:=nSize;
if (n>8192) then
n:=8192;
n:=Socket.SendBuf(p^,n);
//
if (n<=0) then
Raise Exception.Create('发送文件失败!');
Inc(p,n);
Dec(nSize,n);
end;
close;
end;
except on e:Exception do
showmessage(e.Message);
end;
data.Free;
end;接收端:
procedure Tf_Server.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
var
nID:integer;
nSize:Integer;
n:Integer;
p:pByte;
data:TmemoryStream;
begin
data:=TmemoryStream.Create;
GetMem(p,8192);
try
while (nSize>0) do
begin
n:=nSize;
if (n>8192) then
n:=8192;
n:=Socket.ReceiveBuf(P^,n);
if (n<=0) then
Raise Exception.Create('');
data.Write(p^,n);
Dec(nSize,n);
end;
data.SaveToFile(extractfilepath(application.EXEName)+'xfd.tmp');
except
end;
FreeMem(p);
data.Free;
end;每次都是提示:发送文件失败!
procedure Tf_Main.rb_upClick(Sender: TObject);
var
nID:integer;
nSize:Integer;
n:Integer;
p:pByte;
data:TmemoryStream;
begin
data:=TmemoryStream.Create;
try
data.LoadFromFile(extractfilepath(application.EXEName)+'xfd.tmp');
with ClientSocket1 do
begin
open;
nSize:=data.Size;
p:=data.Memory;
while (nSize>0) do
begin
n:=nSize;
if (n>8192) then
n:=8192;
n:=Socket.SendBuf(p^,n);
//
if (n<=0) then
Raise Exception.Create('发送文件失败!');
Inc(p,n);
Dec(nSize,n);
end;
close;
end;
except on e:Exception do
showmessage(e.Message);
end;
data.Free;
end;接收端:
procedure Tf_Server.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
var
nID:integer;
nSize:Integer;
n:Integer;
p:pByte;
data:TmemoryStream;
begin
data:=TmemoryStream.Create;
GetMem(p,8192);
try
while (nSize>0) do
begin
n:=nSize;
if (n>8192) then
n:=8192;
n:=Socket.ReceiveBuf(P^,n);
if (n<=0) then
Raise Exception.Create('');
data.Write(p^,n);
Dec(nSize,n);
end;
data.SaveToFile(extractfilepath(application.EXEName)+'xfd.tmp');
except
end;
FreeMem(p);
data.Free;
end;每次都是提示:发送文件失败!
解决方案 »
- cxdblookupcombobox控件问题
- findfirst和findnext的搜索顺序问题
- 深入delphi有哪些书是必读的?
- 求助,vc++中定义的double **sv;在delphi中如何表示?
- 关于Indy里的TIdTCPClient接收数据的问题!
- cxgrid中关于进度条的一个问题
- 请高手答疑:能不能用一条SQL语句访问SQL SERVER中的两个不同的数据库,如果能怎么访问?
- 浮点型转4字节16进制
- 如何使stringgrid的某一列只具有只讀屬性
- 请教关于用Delphi5.0中的TQuery向Ms Sql Server7.0保存大图象(即:TBlobStream)?
- 怎样把字符串中最后的回车换行去掉
- 用Fastreport做一个船运单
TClientSocket的ClientType:=ctBlocking;ClientSocket能正确连接到ServerScoket如果在n:=Socket.SendBuf(p^,n);后加上showmessage(inttostr(n));需要每次点击对话框,最终是可以正常接收的我不知道问题出在哪儿,请各位大侠指点一下
后加上:
data.Position := 0;
不是我没有发送文件大小,是我复制代码时没复制全
nSize:=data.Size;
if (socket.SendBuf(nSize,SizeOf(nSize)) <> SizeOf(nSize)) then
Raise Exception.Create('发送文件大小错误!');
p:=data.Memory;
其实我的代码是按照delphi6高级编程中的例程输入的,我所迷惑的是:
如果在n:=Socket.SendBuf(p^,n);后加上showmessage(inttostr(n));需要每次点击对话框,最终是可以正常接收的