请帮我看看socket收发文件哪边不对!!!!!!!!!!!!1 ( 积分: 50 )

  • 主题发起人 主题发起人 shenfeng_126
  • 开始时间 开始时间
S

shenfeng_126

Unregistered / Unconfirmed
GUEST, unregistred user!
client端:负责发送文件,每10分钟自动到一个目录下就查,如果有文件就发送
server端:接收文件

client和server都是多进程的

我现在的程序虽然能传些文件了,但还有一些bug,比如文件传送完后关闭client程序的时候,会报句柄无效等错误,请兄弟们帮我看一下到底哪里有写错了
或者请哪位兄弟帮我优化一下代码,谢谢!!!!!!!11

我把主要的一些代码贴出来
client端代码:
procedure TClientThread.Execute;
begin
frmFilesRV.ClientSocket1.Open;
if FindFirst(JD.SENDDIR + '*.*', faAnyFile, sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory)=0 then
begin
MyClientSockets := TWinsocketStream.Create(frmFilesRV.ClientSocket1.Socket,-1);

try
MyReadFile := TFileStream.Create(JD.SENDDIR + sr.Name,fmOpenRead);

//向server发送请求
.....................

while MyClientSockets.WaitForData(1000) do//等待server响应
begin
MyClientSockets.ReadBuffer(Res_Buf.MsgLen.MsgLen, 4);//读前4位
MyClientSockets.ReadBuffer( Res_Buf.Res_Msg, StrToInt(Trim(Res_Buf.MsgLen.MsgLen)) );

if server响应成功 then //向server请求成功
begin
file_len := MyReadFile.Read(FielBuffer, 1000);//每次读1000个字节

if (file_len <> 0) then //如果读取文件结束就发送结束报文
begin
//向server发送数据
.....................
end
else
begin
//向server发送文件结束报文
.................

MyReadFile.Free; //释放
end;
end
else server响应成功 then //server响应失败
begin
MyReadFile.Free;
end;
end;
except
MyReadFile.Free;
end;

end;
until FindNext(sr) <> 0;
FindClose(sr);
end;

end;


server端程序:
procedure TServerThread.Execute;
var
........
begin
while not Terminated and ClientSocket.Connected do
Begin
try
SocketStream := TWinSocketStream.Create(ClientSocket, -1);
try
while SocketStream.WaitForData(1000) do
begin
SocketStream.ReadBuffer(Req_Buf.MsgLen.MsgLen, 4);
SocketStream.ReadBuffer(Req_Buf.Req_Msg, StrToInt(Trim(Req_Buf.MsgLen.MsgLen)) );

if Trim(Req_Buf.Req_Msg.cmd) = '0' then //0:文件名
begin
//接收client来的请求,server响应成功
..........
end
else if Trim(Req_Buf.Req_Msg.cmd) = '1' then //1:数据
begin
//接收client发来的数据,并响应成功
..........
end
else if Trim(Req_Buf.Req_Msg.cmd) = '2' then //2:文件结束
begin
// client发来文件结束请求报文,server响应成功
................

F.Free;
end;
end;
finally
end;
except
//发送响应错误报文
.................

Terminate;
end;
end;
end;
 
怎么没人回答啊,稍微指点一下下也行啊
 
腾云驾雾超级服务器正式免费推出!无须任何维护,可让您在1分钟之内建立属于自己的网站!
腾云驾雾超级服务器程序既是一个 webserver 又是一个网站。超级服务器的主要目的是让运行这个程序的人,立即拥有一个属于自己

的网站,理论上 腾云驾雾超级服务器 可以将世界上任何一个网站变成运行本服务器程序的那台电脑的网站!
同时您只要拥有一个全世界唯一的IP地址,那么你就可以让全世界的人来访问你的网站了!当然您要是有一个域名绑定您的IP,那就更

爽了!
腾云驾雾超级服务器程的最大优点是:
1、可以让你在一分钟之内完全拥有一个属于您自己的网站。(快速)
2、您拥有的这个网站将无需要任何维护!(省事)
3、您只要申请 google 的 在线广告 AdSense 就可以开始挣钱了。(挣钱)
4、只要在 参数配置文件 tengyunjiawuserver.ini 中填写 您 google AdSense 的代码编码就可以开始挣钱了。
5、腾云驾雾超级服务器属于纯绿色软件,无需安装注册!(绿色环保)
6、腾云驾雾超级服务器即是一个 webserver 又是一个网站,所以只占用大约 1.5MB大小的空间!(不占地)
理论上 腾云驾雾超级服务器 可以将世界上任何一个网站变成运行本服务器程序的那台电脑的网站!
超级服务器 奥运版
下载地址1:http://www.tengyunjaiwu.com/download/tyjw_aoyun.rar
下载地址2:http://www.600bbs.com/t.rar
超级服务器 baidu 版
下载地址1:http://www.tengyunjaiwu.com/download/tyjw_baidu.rar
下载地址2:http://www.600bbs.com/chao.rar

腾云驾雾超级服务器即是一个 webserver 又是一个网站,如果您的电脑正在运行 Apache 或 IIS 或 Tomcat 请先关掉!

有任何问题请联系我: http://www.tengyunjiawu.com

可以定制啊,你看上哪个网站了,告诉我,我帮你做那个网站的版本啊!

腾云驾雾超级服务器推出 google 版本,端口,广告可完全自定义

超级服务器 google 版
下载地址1:http://www.tengyunjiawu.com/download/tyjw_google.rar

你可以看看 google 版本的 DEMO (本人带宽只有 1MB,速度可能慢了点,大家多谅解啊!)
http://www.tengyunjiawu.com:8080
这个版本也叫气死 google 不偿命
做的还不是很完善,请大家多批评指教!
 
应该是客户端线程未终止
 
后退
顶部